|
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
...
|