求解局部变量
不清楚怎么用栈保存局部变量求讲,谢谢本帖最后由 lslin 于 2014-3-26 09:28 编辑
随便帖一段代码给你说下
00686f30 53 push ebx
00686D11 56 push esi
00686D12 57 push edi 这里是保存环境,程序尾部会POP还原
00686D13 83C4 F8 add esp, -8 这里申请了(2个DWORD型)局部变量
00686D16 894C24 04 mov dword ptr , ecx把ECX的值放入申请的一个局部变量
00686D1A 891424 mov dword ptr , edx 把EDX的值放入申请的另外一个局部变量
00686D1D 33D2 xor edx, edx
00686D1F 8B3424 mov esi, dword ptr 这里是把局部变量的值放到ESI
00686D22 2BB0 140B0800 sub esi, dword ptr
00686D28 8B4C24 04 mov ecx, dword ptr
00686D2C 2B88 180B0800 sub ecx, dword ptr
00686D32 85F6 test esi, esi
。。。。。。
。。。。。。
上面是我最近逆向的代码,将就将就,(其实这段没有保存栈地址,只不过保证了栈平衡就行了)
下面什么的自己想象,有代码很容易理解,我只帖上头部的代码,一般尾部都会平衡栈,比如上面的代码
的尾部一般会有 ADD ESP,8
希望对楼主有所帮助
用栈保存局部变量: 比如你想把ax中的值保存进栈,就用push ax这样ax中的数据就进栈了然后你就可以使用ax了,需要的时候 再popax这样的ax中的数据就又 回到ax中了!(但是注意 栈的指针即sp 的变化,一切都要在你的掌握之中啊!!呵呵!!) 3个局部变量如:
int a=0,b=1,c=2;
相当于:
movl $0,%eax
pushl %eax
movl $1,%eax
pushl %eax
movl $2,%eax
pushl %eax
看一下 逆向分析的书籍 把程序往OD里面一扔。。观察 很简单啊!栈的特征就是先进后出啊!
页:
[1]