逆向工程核心原理学习笔记(十五):栈帧2:设置局部变量
2017-05-06 19:41
423 查看
源码的main函数中我们设置了局部变量
long a = 1, b = 2;
我们回到OD,看汇编代码:
00401020 >/$ 55 PUSH EBP ; #main
00401021 |. 8BEC MOV EBP, ESP
00401023 |. 83EC 08 SUB ESP, 0x8
00401026 |. C745 F8 01000>MOV DWORD PTR SS:[EBP-0x8], 0x1
0040102D |. C745 FC 02000>MOV DWORD PTR SS:[EBP-0x4], 0x2
我们已经知道了[b]401020和401021处的地址过后形成了栈帧。[/b]
那么[b]401023之后的地址是什么意思呢?[/b]
[b]SUB ESP, 0x8 从ESP开辟出一个8个字节的空间[/b]
我们从源码可以知道[b] long a = 1, b = 2; 两个变量占据了8个字节的内存空间。[/b]
这个恰恰就是为他们开辟的。
因为EBP的之=值在main函数内部是固定不变的,我们就能以它为基准来访问函数的局部变量了。
如图所示:
调试至此,我们按F8,一步一步往下走,走到40103C,我们可以看到栈中的情况了:
EBP-4 存放2
EBP-8,存放1
long a = 1, b = 2;
我们回到OD,看汇编代码:
00401020 >/$ 55 PUSH EBP ; #main
00401021 |. 8BEC MOV EBP, ESP
00401023 |. 83EC 08 SUB ESP, 0x8
00401026 |. C745 F8 01000>MOV DWORD PTR SS:[EBP-0x8], 0x1
0040102D |. C745 FC 02000>MOV DWORD PTR SS:[EBP-0x4], 0x2
我们已经知道了[b]401020和401021处的地址过后形成了栈帧。[/b]
那么[b]401023之后的地址是什么意思呢?[/b]
[b]SUB ESP, 0x8 从ESP开辟出一个8个字节的空间[/b]
我们从源码可以知道[b] long a = 1, b = 2; 两个变量占据了8个字节的内存空间。[/b]
这个恰恰就是为他们开辟的。
因为EBP的之=值在main函数内部是固定不变的,我们就能以它为基准来访问函数的局部变量了。
如图所示:
调试至此,我们按F8,一步一步往下走,走到40103C,我们可以看到栈中的情况了:
EBP-4 存放2
EBP-8,存放1
相关文章推荐
- 逆向工程核心原理学习笔记(十八):栈帧5:设置add()函数的局部变量(x,y)
- 逆向工程核心原理学习笔记(二十三):栈帧10:设置返回值,删除栈帧&main()函数终止
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(二十):栈帧7:删除函数add()的栈帧&函数返回
- 逆向工程核心原理学习笔记(十六):栈帧3:add()函数参数传递与调用
- 逆向工程核心原理学习笔记(二十一):栈帧8:删除函数add()的参数(整理栈)
- 逆向工程核心原理学习笔记(十九):栈帧6:ADD运算
- 逆向工程核心原理学习笔记(二十二):栈帧9:调用printf()函数
- 逆向工程核心原理学习笔记(十四):栈帧1
- 逆向工程核心原理学习笔记(十):IA-32寄存器基本讲解
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(九):小端序标记法2
- 逆向工程核心原理学习笔记2-基址重定位基本原理
- 逆向工程核心原理学习笔记(二十六):abex'crackme #2 name的存取
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(二):字符串检索法查找main函数
- 逆向工程核心原理学习笔记1-通过IAT手工定位notepad.exe中的导入函数
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈
- 逆向工程核心原理学习笔记(十一):栈