鱼子卿 发表于 2014-3-25 09:23:27

求解局部变量

不清楚怎么用栈保存局部变量求讲,谢谢

lslin 发表于 2014-3-25 09:23:28

本帖最后由 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
希望对楼主有所帮助

swsm 发表于 2014-3-25 15:44:40

用栈保存局部变量: 比如你想把ax中的值保存进栈,就用push ax这样ax中的数据就进栈了然后你就可以使用ax了,需要的时候 再popax这样的ax中的数据就又 回到ax中了!(但是注意 栈的指针即sp 的变化,一切都要在你的掌握之中啊!!呵呵!!)

oggplay 发表于 2014-3-25 19:29:46

3个局部变量如:
int a=0,b=1,c=2;
相当于:
movl $0,%eax
pushl %eax
movl $1,%eax
pushl %eax
movl $2,%eax
pushl %eax

无名侠 发表于 2014-3-25 20:41:28

看一下 逆向分析的书籍

向往青莲 发表于 2014-3-25 21:45:12

把程序往OD里面一扔。。观察

青玄 发表于 2014-3-27 09:56:07

很简单啊!栈的特征就是先进后出啊!
页: [1]
查看完整版本: 求解局部变量