0

我目前正在研究在 C/C++ 中使用一些 ASM

我有以下

__declspec(naked) unsigned long 
someFunction( unsigned long inputDWord )
{
    __asm
    {
    }
}

在 asm 中,我将如何返回 unsigned long?

我需要将一些东西压入堆栈然后调用 ret 吗?我很长时间没有使用过 Asm,以前也从未使用过 C++。

谢谢!

4

1 回答 1

3

编辑:感谢@Matteo Italia,我更正了ret.

将 retval 放入eax寄存器中,这是根据__cdecl__stdcall约定的。

然后,根据调用约定,您应该使用适当的ret指令变体:

  • __cdecl约定(或类似)的情况下 - 使用ret. 在机器级别上,这意味着pop从堆栈返回地址并返回jmp到它。调用者负责从堆栈中删除所有函数参数。
  • __stdcall约定(或类似)的情况下 - 使用ret X, 而是X所有函数参数的大小。
于 2012-11-18T23:11:31.900 回答