2

ret 是做什么的?为什么这里需要 ret 0xC?如果它只是 ret 而不是 ret 0xC 或者 0x4 怎么样?

mov eax,[esp+10] // param3
mov ecx,[esp+0C] // param2
mov edx,[esp+08] // param1
push eax
push ecx
push edx 
mov ecx,esi
call File.exe+333330 
pop esi
ret 000C
4

1 回答 1

1

简而言之,ret 00Ccall File.exe+333330. 在调用之前,您将三个 4 字节的值压入堆栈( 、 和 的eax内容ecxedx。4 * 3 = 12 = 0xC(十六进制)。如果您ret没有值,它会从您的子例程返回,但根本不会清理堆栈。如果你有ret 4,它只会清理其中一个值。ret 12ret 0xC照顾所有三个。

有关类似问题,请参见此处。

于 2015-09-03T04:59:37.517 回答