首页
社区
课程
招聘
[原创]栈功能分析-局部变量传送
发表于: 2020-12-9 14:44 4742

[原创]栈功能分析-局部变量传送

2020-12-9 14:44
4742

实验目的:逆向可执行文件,逐步分析局部变量如何通过栈进行传送。

测试代码如下图:

       如下图: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 指令来调用。即如下代码:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-3-30 22:37 被天象独行编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 57
活跃值: (901)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写的真好,很详细。
2021-2-5 21:17
0
雪    币: 1657
活跃值: (6833)
能力值: ( LV12,RANK:215 )
在线值:
发帖
回帖
粉丝
3
aizhiqun 写的真好,很详细。
谢谢您的肯定
2021-2-6 11:09
0
游客
登录 | 注册 方可回帖
返回
//