|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- EAX = 003EF884 EBX = 10101010 ECX = 00202020 EDX = 01021005 ESI = 01021005 EDI = 01021005 EIP = 01022046 ESP = 003EF814 EBP = 003EF81C EFL = 00000217
-
- TestProc Proc dwParam1:DWORD,bwParam1:DWORD
- 01022034 push ebp ;保存ebp的值,函数执行完毕后需要恢复这个值
- 01022035 mov ebp,esp ;把当前的堆栈指针给ebp,保存esp的值,函数执行完毕后需要恢复这个值
- ;参数在调用函数前已经存入堆栈,从[EBP+8]、[EBP+C]、……开始
- 01022037 h add esp,0FFFFFFF8 ; esp指向参数地址 【在执行第一条指令之前esp指向参数首地址】
- local loc1:dword ,loc2:dword ;
-
- mov ebx, dwParam1
- 0102203A mov ebx,dword ptr [dwParam1]
- mov loc1,ebx
- 0102203D mov dword ptr [loc1],ebx
- mov ecx,bwParam1
- 01022040 mov ecx,dword ptr [bwParam1]
- mov loc2,ecx
- 01022043 mov dword ptr [loc2],ecx
-
- ret
- 01022046 leave
- 01022047 ret 8
-
- invoke TestProc,10101010h,202020h
- 0102204A push 202020h ;保存参数
- 0102204F push 10101010h
- 01022054 call TestProc (01022034h)
-
-
复制代码
我的问题:
参数在调用函数前已经存入堆栈,从[EBP+8]、[EBP+C]、……开始
add esp,0FFFFFFF8 这条指令应该是让esp指向参数首地址
可是0FFFFFFF8=-8h, 那么esp指向[EBP-8] 而不是[EBP+8] ??
加一个负数等于减一个正数
add esp, 0FFFFFFF8
add esp, -8
sub esp, 8
|
|