C语言01
1、按f7后f5,打开程序看运行到哪,再打开寄存器窗口和内存窗口
shift➕f结束

二.c语言格式

三.函数的反汇编分析
1.空函数
例:编写一个空函数,没参数也没返回值,分析函数

f7,f5后右键反汇编

从call开始写

再f11打开进函数里面,有jmp


再f11跳转


jmp到0040D6F0,开栈(即提升堆栈,为当前程序执行分配一段空间叫缓冲区)


2.简单功能
例:编写一个函数能够对任意两个整数实现加法,并分析

①

运行后打开反汇编之后停在箭头所指的位置

②不能直接按f11,因为代码只走到0040D758,要想一行一行的走是按f10
走到0040D75C,按f11看里面的函数


③中转作用,再摁f11跳转

0040D710开始每个颜色模块分别是提升堆栈,保存现场,填充缓冲区,函数实际操作,恢复现场,降低堆栈

004D710 push ebp(这一行漏了与下面两行是一个颜色)



3.嵌套调用
例:编写一个函数,能对任意三个整数实现加法,分析反汇编(使用上一个函数)
①f7f5打开:



②一行一行运行到0040D7BE时f11打开跳转到00401014:


③再f11打开跳转到0040d740:




eax=3,按f10运行到0040D758,将ebp➕0ch直接拖过去看到第一行是03

ecx=2,直接拖过去(可以不用运行到那一行直接拖是因为在那几行直接ebp的值没有改变,不影响)

④ push eax
push ecx 这两行是传递参数的

如果call多没必要每个都进去看,可以先分析外部,不进函数里面观察eax的值(很多时候一个函数的返回值都放在eax里面,如果他改的是某一块内存就需要进函数里面看),f10到0040D765时call已经运行

⑤add esp,8是平衡上面一行函数堆栈

call那行是调用参数,后面一行是平衡堆栈

⑥⑤中0040D773按f11进去分析


浙公网安备 33010602011771号