勇往直前 发表于 2012-12-22 21:21:21

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

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

メ㊣逆ご帅☆ 发表于 2012-12-22 21:21:22

1.esp是不是现在还等于k-8?
答:这个不一定,因为我不清楚你子程序CALL尾部有没有平衡栈,你自己去下载光盘自己跟下那个程序就知道了
2.lea是是取的地址?
lea eax,
也就是
eax=esp+04
这里如果esp=0013FFC0
那么
lea eax,
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 和 ,是不是只是在类型上有区别?
两个都是dword的指针,前面的dword ptr 表示取值大小
例如:esp+04=00401000这里存着一个值FFFFFFFF
如果我们mov eax,dword ptr
那么eax=FFFFFFFF
如果我们mov eax,word ptr
那么eax==FFFF

勇往直前 发表于 2012-12-23 00:31:35

メ㊣逆ご帅☆ 发表于 2012-12-22 22:37 static/image/common/back.gif
1.esp是不是现在还等于k-8?
答:这个不一定,因为我不清楚你子程序CALL尾部有没有平衡栈,你自己去下载光盘 ...

非常感谢,我想我已经明白点了,高手和汇编初学者就是有差距!
他的这段代码好像是编译器精简过的!我用vc6把c代码写进后反汇编,代码多出好几行呢!初学者看精简真实很难的!

落叶无痕 发表于 2013-4-24 21:30:58

来看看呵呵
页: [1]
查看完整版本: 汇编语言对指针的代码的理解,有段书代码没懂,急呀!