获取参数并从ASM代码返回值

时间:2014-04-15 00:40:15

标签: assembly arguments

我正在调查一些Windows内部因素,因为我无法找到任何文档,所以我开始查看已经过的代码。基本上我想知道的是如何确定函数的参数和返回值:

这些是通话前的说明:

MOV EAX,DWORD PTR DS:[ESI+64]
LEA ECX,DWORD PTR SS:[EBP-4]
PUSH ECX
PUSH DWORD PTR DS:[EAX+4]
PUSH DWORD PTR DS:[EAX]
PUSH DWORD PTR DS:[ESI+60]
CALL <FUNCTION CALL>

这是4次推送后的筹码:

000000C0(4字节文字?)

001CEAF0(堆中的地址?)

000001B8(4 Byte Literal?)

0019F2FC(堆中的地址?)

1 个答案:

答案 0 :(得分:0)

鉴于您正在调查Microsoft Windows内部,所使用的调用约定似乎可能是stdcall;维基百科指出:

  

stdcall是Microsoft Win32 API和Open Watcom C ++的标准调用约定。

有关详细信息,请参阅calling conventions上的维基百科页面以及此WikiBook entry

因此,在您的情况下,这将对应于以下C代码:

eax = function(0x0019F2FC, 0x1B8, 0x001CEAF0, 0xC);