鱼C论坛

 找回密码
 立即注册
查看: 2156|回复: 3

汇编语言对指针的代码的理解,有段书代码没懂,急呀!

[复制链接]
发表于 2012-12-22 21:21:21 | 显示全部楼层 |阅读模式
1鱼币
求高手指点一下这段代码的含义!谢谢!汇编对指针的理解很重要!
这个是看雪的加密与解密的书中第79页的代码!如果这地方卡住过不去,c语言的指针就弄不明白了!
设esp=k
sub esp,00000008          ;为局部变量分配内存
lea eax,dword ptr [esp+04] ; eax指向变量,值为k-4
lea ecx,dword ptr [esp] ;
push eax
push ecx
mov [esp+08],00000005  ;esp+08的值为k-8,参数a的值放入
mov [esp+0c],00000006  ;
call 00401040          ;
我的问题是 1.esp是不是现在还等于k-8?
           2.lea是是取[esp+04]的地址?
           3.为什么注解是“esp+08的值为k-8”?书上印刷错误?
            4. dword ptr [esp+04]和 [esp+08] ,是不是只是在类型上有区别?

最佳答案

查看完整内容

1.esp是不是现在还等于k-8? 答:这个不一定,因为我不清楚你子程序CALL尾部有没有平衡栈,你自己去下载光盘自己跟下那个程序就知道了 2.lea是是取[esp+04]的地址? lea eax,[esp+04] 也就是 eax=esp+04 这里如果esp=0013FFC0 那么 lea eax,[esp+04] eax=0013FFC0+4=0013FFC4 3.为什么注解是“esp+08的值为k-8”?书上印刷错误? 这里我们设一开始esp=0013FFC0 然后esp=k 那么k=0013FFC0 接着esp-8 则esp=13FFB8 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-12-22 21:21:22 | 显示全部楼层
1.esp是不是现在还等于k-8?
答:这个不一定,因为我不清楚你子程序CALL尾部有没有平衡栈,你自己去下载光盘自己跟下那个程序就知道了
2.lea是是取[esp+04]的地址?
lea eax,[esp+04]
也就是
eax=esp+04
这里如果esp=0013FFC0
那么
lea eax,[esp+04]
eax=0013FFC0+4=0013FFC4

  3.为什么注解是“esp+08的值为k-8”?书上印刷错误?
这里我们设一开始esp=0013FFC0
然后esp=k
那么k=0013FFC0
接着esp-8
则esp=13FFB8
push eax
push ecx
esp=13FFB8-4-4=13FFB0
那么现在esp=13FFB0
k=0013FFC0
那么esp+8=k-8
4. dword ptr [esp+04]和 [esp+08] ,是不是只是在类型上有区别?
两个都是dword的指针,前面的dword ptr 表示取值大小
例如:esp+04=00401000这里存着一个值FFFFFFFF
如果我们mov eax,dword ptr [esp+04]
那么eax=FFFFFFFF
如果我们mov eax,word ptr [esp+04]
那么eax==FFFF
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-12-23 00:31:35 | 显示全部楼层

非常感谢,我想我已经明白点了,高手和汇编初学者就是有差距!
他的这段代码好像是编译器精简过的!我用vc6把c代码写进后反汇编,代码多出好几行呢!初学者看精简真实很难的!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-4-24 21:30:58 | 显示全部楼层
来看看呵呵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表