ASM功能呼叫& Ret - ret 0xC做什么?

时间:2015-09-03 04:27:01

标签: assembly

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

1 个答案:

答案 0 :(得分:2)

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

有关类似问题,请参阅here