自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yiftss

if you can read assembly language then everything is open source.

  • 博客(30)
  • 收藏
  • 关注

原创 【线程安全】临界区实现线程互斥

问题概述:在多线程程序开发的过程中,当多个线程对同一共享资源进行修改时,就会产生线程安全问题。例如如下情况就会产生线程安全问题:#include <Windows.h>#include <stdio.h>int g_count = 0;DWORD WINAPI ThreadProc(LPVOID){ for (int i = 0; i < 10...

2019-07-09 15:43:58 412

原创 【汇编程序】实现函数功能周期性执行(多媒体定时器)

程序需求:使用Windows系统提供的定时器API函数,实现每隔一秒钟输出当前时间。编程思路:C中需要包含Winmm.lib这个库即可,汇编中也需要包含这个库,同时需要进行函数的声明。获取当前时间的函数使用的是GetLocalTime函数,汇编中也需要声明,由于汇编中没有SYSTEMTIME结构体,就自己定义了一块大小相同的内存区域,然后使用偏移的方式访问。开发环境Win10 + VS20...

2019-05-22 15:23:23 629

原创 【汇编程序】实现修改函数返回地址改变程序执行流程

程序需求:编写一函数,该函数执行结束后返回,返回后原有程序的执行流程发生改变。编程思路:函数的调用是通过堆栈进行的,在函数开始执行之前会将此函数位置的下一条指令地址压入栈中,函数执行结束后会返回到这个地址处继续执行指令。我们可以通过在函数体内部修改栈中的函数返回地址,从而达到修改程序的执行流程。在C语言中可以使用混编的方式来达到修改函数返回地址(因为C语言无法直接修改寄存器的值,只能使用汇编实现)...

2019-04-23 16:20:30 2479

原创 【汇编程序】实现调用系统API函数MessageBox并输出不同形态

程序需求:编写一个调用Windows API 的程序,演示MessageBoxA的多种不同的组态。编程思路:MessageBoxA函数是Windows系统提供的API函数,需要引入user32.lib这个库,同时还需要手动声明一下函数原型。MessageBoxA函数中最后一个参数为对话框风格,通过设置这个参数不同值,可以实现显示MessageBoxA的不同组态。具体参数含义可以参考微软官方手册。...

2019-04-20 12:09:24 2607

原创 【汇编程序】实现冒泡排序子程序(BubbleSort)

程序需求:编程写一个名为BubbleSort的冒泡排序子程序,主子程序间的参数传递通过堆栈完成;并写主程序验证它。 编程思路:主程序向子程序传递数组的时候,传递的是数组的首地址,也就是传递的是指针,所以子程序中寻址采用间接寻址方式。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int array[10] =...

2019-04-18 22:25:51 2340

原创 【汇编程序】实现求两数最大公约数子程序

程序需求:编程写一个名为Gcd的求两个数最大公约数子程序,主子程序间的参数传递通过堆栈完成。调用Gcd子程序求出三个双自变量:dvar1、dvar2与dvar3的最大公约数并输出。编程思路:先写出C实现,再转换为汇编实现。为了降低难度,子程序中不单独开辟栈空间来存储变量,直接通过EBP对传入参数进行访问。开发环境Win10 + VS2017C语言代码实现如下:#include ...

2019-04-18 21:08:01 2604 1

原创 【汇编程序】实现求n阶乘子程序(递归)

程序需求:编写一个求n!的子程序,利用它求1!+2! +3! +4! +5! +6! +7! +8! 的和并输出。编程思路:先写出C语言实现,再写汇编实现,汇编中使用栈来传递参数。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int sum = 0;int recursion(int n){ if (n == ...

2019-04-18 18:51:42 8757

原创 【汇编程序】实现一维数组的逆置

程序需求:编程写一个完整的程序,将数组array中的元素按逆序存放,要求程序中附加的变量最少。数据段的定义如下: .data array dword 12,4, 168,122,-33,56,78,99,345, 66,-5编程思路:设置2个指针,分别指向第一个与最后一个元素,首尾元素交换;采用loop循环指令。汇编中esi为头指针,edi为尾指针,ecx为循环次数。开发环境...

2019-04-14 17:00:08 4868 1

原创 【汇编程序】实现字符串中去除空格字符

程序需求:有一个首地址为string的字符串 ,剔除string中所有的空格字符。请从字符串最后一个字符开始逐个向前判断、并进行处理。编程思路:假设串以0作为结束标志,从右向左扫描,遇到空格后, 将其后的所有字符向前移动一个位置,直到该字符为止。 由于串长是动态变化的,所以需要设置三个指针,tailP指向串尾, 扫描用的指针scanP,及移动时用的指针moveP。汇编中esi==scanP,ed...

2019-04-14 16:42:11 4088

原创 【汇编程序】实现统计字符串中小写字母和空格数量

程序需求:编程写一个完整的程序统计字符串msg中空格的个数与小写字母的个数,并分别将它们存入space单元与lowercase单元中并输出。编程思路:汇编中使用eax来统计空格数量,ebx来统计小写字母数量,对字符数组的访问采用间接寻址,esi的值为字符数组的首地址。ecx的值为字符数组中字符的数量。开发环境Win10 + VS2017C语言代码实现如下:#include &l...

2019-04-14 16:28:15 4339

原创 【汇编程序】实现输出斐波那契数列(Fibonacci sequence)

程序需求:Fibonacci numbers的定义: f1=1,f2=1, fn= fn-1 + fn-2 n>=3 编程输出Fibonacci numbers的前20项。编程思路:汇编中esi相当于C语言里的i变量,ecx为输出时循环总次数。开发环境Win10 + VS2017C语言代码实现如下:...

2019-04-14 15:55:05 7129 1

原创 【汇编程序】实现输出1000以内所有素数(Prime number)

程序需求:编程写一个完整的程序,求出1000以内的所有素数,并将它们存入Prime数组中,素数的个数存入变量Pcounter中。编程思路:esi相当与C中的i,edi相当与C中的j,ecx相当于C中的Pcounter。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int Prime[1000];int main()...

2019-04-14 14:38:52 8134 1

原创 【汇编程序】实现输出10000以内所有回文数(Palindrome number)

程序需求:palindrome(回文)是指正读和反读都一样的数或文本。例如:11、121、12321等,编写程序,求0到10000之间所有回文数并输出。要求每行输出10个数。编程思路:汇编中esi相当于C语言中的i变量,eax相当于tmp变量,ecx相当于result变量,count用来统计回文数的个数。开发环境Win10 + VS2017C语言代码实现如下:#include ...

2019-04-14 14:24:53 5527

原创 【汇编程序】实现输出2012-2100年之间所有闰年

程序需求:能被4整除但不能被100整除,或者年被400整除的年份是闰年。编程写一个完整的程序,求出2012年~2099年中的所有闰年年份,把它们存放在数组Lyear中并输出到屏幕上。编程思路:汇编中ESI用来做年份计数器,ECX用来做闰年个数计数器,用DIV指令来求余数。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>i...

2019-04-14 13:58:07 3020

原创 【汇编程序】实现判断输入的年份是否为闰年

程序需求:输入一个年份,判断其是否是闰年。编程思路:被4整除且不被100整除,或者被400整除的年份就是闰年,C语言中通过%来进行取余运算,汇编中通过DIV指令。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int year = 0;int main(){ printf("please input the yea...

2019-04-14 13:04:47 7989 2

原创 【汇编程序】实现三个数由大到小排序

程序需求:从键盘上输入3个有符号的双字整数,编写一完整的程序按照由大到小的顺序输出这三个数。编程思路:三个数每两个数进行比较,如果后一个数大于前一个数则交换两个变量的值。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int value1 = 0;int value2 = 0;int value3 = 0;int...

2019-04-14 12:45:33 5763

原创 【汇编程序】实现判断输入字母大小写

程序需求:从控制台输入一字母,判断字母的大小写情况,并通过控制台输出。编程思路:字母的ascii值在a-z之间为小写,A-Z之间为大写。开发环境Win10 + VS2017C语言代码实现如下:#include <stdio.h>int main(){ char ch1; printf("please input the letter.\n"); scanf...

2019-04-14 11:53:27 5925 1

原创 【汇编程序】实现一维数组求和(间接寻址)

我们在开始写汇编代码的时候,一般是先写出C语言的实现,然后再翻译成汇编的实现。在这个过程中,我们还可以利用IDE的反汇编功能查看编译器是如何帮我们生成汇编代码的,以及思考编译器为什么这样做,搞懂了这些,不论是对我们的C语言还是汇编语言都有很大的提升。C语言代码实现如下:#include <stdio.h>int array[] = { 0,1,2,3,4,5,6,7,8...

2019-04-13 14:35:55 2132

原创 【汇编程序】实现一维数组求和(相对寻址)

我们在开始写汇编代码的时候,一般是先写出C语言的实现,然后再翻译成汇编的实现。在这个过程中,我们还可以利用IDE的反汇编功能查看编译器是如何帮我们生成汇编代码的,以及思考编译器为什么这样做,搞懂了这些,不论是对我们的C语言还是汇编语言都有很大的提升。C语言代码实现如下:#include <stdio.h>int array[] = { 0,1,2,3,4,5,6,7,8...

2019-04-13 14:11:42 2483

原创 【汇编程序】实现1-100偶数求和

我们在开始写汇编代码的时候,一般是先写出C语言的实现,然后再翻译成汇编的实现。在这个过程中,我们还可以利用IDE的反汇编功能查看编译器是如何帮我们生成汇编代码的,以及思考编译器为什么这样做,搞懂了这些,不论是对我们的C语言还是汇编语言都有很大的提升。C语言代码实现如下:#include <stdio.h>int main(){ int sum = 0; for (...

2019-04-13 13:42:32 13859

原创 【汇编程序】实现1-100求和(使用条件转移)

我们在开始写汇编代码的时候,一般是先写出C语言的实现,然后再翻译成汇编的实现。在这个过程中,我们还可以利用IDE的反汇编功能查看编译器是如何帮我们生成汇编代码的,以及思考编译器为什么这样做,搞懂了这些,不论是对我们的C语言还是汇编语言都有很大的提升。C语言代码实现如下:#include <stdio.h>int main(){ int sum = 0; for (...

2019-04-13 13:17:12 2702

原创 【汇编程序】实现1-100求和(使用LOOP循环)

我们在开始写汇编代码的时候,一般是先写出C语言的实现,然后再翻译成汇编的实现。在这个过程中,我们还可以利用IDE的反汇编功能查看编译器是如何帮我们生成汇编代码的,以及思考编译器为什么这样做,搞懂了这些,不论是对我们的C语言还是汇编语言都有很大的提升。C语言代码实现如下:#include <stdio.h>int main(){ int sum = 0; int c...

2019-04-13 12:53:41 19212 1

原创 【汇编程序】调用C库函数

当我们在VS环境下学习汇编语言的时候,调用Win32的API函数进行控制台的输入和输出是非常麻烦的。但是C的库函数怎么调用又好像不清楚,以下是在VS2017环境下调用C库函数printf和scanf函数实现控制台输入输出.第一步:包含C库文件INCLUDELIB kernel32.lib;这个库用于调用Win32的ExitProcess API函数.INCLUDELIB ucrt.li...

2019-04-11 21:20:05 2646

原创 VS2017搭建汇编程序开发环境

具体步骤如下:1.打开VS2017新建一个项目.2.新建一个空的项目.3.右键项目->生成依赖项->生成自定义.4.选中masm,点击确定.5.打开项目属性配置页面.6.在链接器->系统->子系统中,选择控制台,点击确定.7.在源文件中添加新建项.8.修改名称为hello.asm,点击确定.9.复制如下代码到hello.a...

2019-04-09 23:04:26 2848 5

原创 VMware虚拟机12个使用技巧

1.增加虚拟机可用物理内存2.添加硬件设备(硬盘)3.控制权的切换由于VMware是在一台计算机中同时运行多个操作系统,就存在从一个系统切换到另系统的问题,如果你发现键盘和鼠标在某一系统中无法使用,那么就必须进行切换,VMware默认切换方法是同时按下Ctrl+Alt组合键。4.正确关机技巧虚拟机的关机也是要按一定步骤进行,如果直接点击VMware工具栏上的Power ...

2019-04-04 22:57:07 7232

原创 [002]CentOS7环境初始配置

第一步:关闭firewalld防火墙并设置开机不启动firewalld是什么?CentOS7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Mangager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙管理工具,它拥有基于CLI(命令行界面)和GUI(图形用户界面)的两种管理方式。具体的使用以及配置我们...

2019-04-04 22:18:11 137

原创 [001]Linux系统安装-CentOS7安装

第一步:下载CentOS7系统1.浏览器中输入CentOS官网地址,进去后点击Get CentOS Now.2.点击DVD ISO,这是CentOS7的系统镜像.3.点击最新的链接地址下载,这里最新版本是7.6.1810.4.耐心等待下载完成,并将镜像文件保存在指定路径.第二步:在VMware中创建虚拟机1.点击新建虚拟机.2.点击自定义(高级),并点击下一步....

2019-04-04 15:39:38 864

原创 VMware虚拟机安装教程

VMware是什么?(VMwareWorkstation)是VMware公司销售的商业软件产品之一。该工作站软件包含一个用于英特尔x86相容电脑的虚拟机套装,其允许用户同时创建和运行多个x86虚拟机。每个虚拟机实例可以运行其自己的客户机操作系统,如(但不限于)Windows、Linux、BSD变生版本。用简单术语来描述就是,VMware工作站允许一台真实的电脑在一个操作系统中同时开启并运行数个...

2019-04-04 13:58:46 3086 1

原创 CrackMe004 CKme

第一步:分析程序第二步:开始爆破此时爆破成功!第三步:算法分析由此编写算法如下:#include <stdio.h>#include <string.h>int main(){ char name[20]; printf("please input your name.\n"); scanf("...

2019-03-31 22:47:33 279

原创 CrackMe001 Acid burn

第一步:分析程序在子窗口1中name和serial输入不正确,程序会反馈一个错误提示。Sorry , The serial is incorect !在子窗口2中serial输入不正确,程序也会反馈一个错误提示。Try Again!!这两个信息将作为接下来爆破的关键点第二步:开始爆破接下来使用相同方法处理刚才另一个疑似成功的提示信息...

2019-03-31 12:44:18 341 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除