马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|