-
-
[原创]栈功能分析-局部变量传送
-
发表于:
2020-12-9 14:44
4743
-
实验目的:逆向可执行文件,逐步分析局部变量如何通过栈进行传送。
测试代码如下图:
如下图:main()函数执行地址为0x401020。
在执行main()函数执行需要准备好栈环境。详细看如下代码:
首先,执行PUSH EBP 将寄存器EBP当中的值压入栈当中。如下图:
然后,执行MOV EBP,ESP。来初始化一个栈空间。详细如下图:
执行一个函数前,通常会准备一个栈空间。一般我们通过PUSH EBP;MOV EBP,ESP这两个指令来初始化一个栈帧。其中PUSH EBP 指令用来保存上一个栈的EBP值。MOV EBP,ESP指令来初始化一个栈帧。
执行局部变量a,b 赋值操作。该“long a=1,b=2”语句对应于汇编指令如下图:
首先,有“long”我们知道值是占用四个字节,那么两个变量,需要在栈中划分8个字节的空间。那么执行指令“SUB ESP,0X8”用来划分8个字节的空间。然后执行MOV指令。其中“[local.1]和[local.2]相当于变量a,b”栈内容如下:
接下来,程序执行到如下图位置:
在执行add() 函数之前首先需要将函数需要的参数压入到栈,先将先前产生的局部变量通过EAX,ECX寄存器为中转站重新压入栈。详细如下图指令:
现在我们来观察一下,栈中的情况,我们发现栈中地址“0019FF18”和“0019FF1C”已经存放了局部变量a,b的值。
Add()函数已经存放入栈当中了,那么接下来需要调用add()函数。在汇编代码中,尝尝使用call 指令来调用。即如下代码:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-3-30 22:37
被天象独行编辑
,原因: