我正在调查一些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(堆中的地址?)
答案 0 :(得分:0)
鉴于您正在调查Microsoft Windows内部,所使用的调用约定似乎可能是stdcall
;维基百科指出:
stdcall
是Microsoft Win32 API和Open Watcom C ++的标准调用约定。
有关详细信息,请参阅calling conventions上的维基百科页面以及此WikiBook entry。
因此,在您的情况下,这将对应于以下C代码:
eax = function(0x0019F2FC, 0x1B8, 0x001CEAF0, 0xC);