C/C++ 从 x86 代码返回



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

我有以下

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

在 ASM 中,我将如何返回未签名的长篇?

我是否需要将某些内容推送到堆栈上,然后调用 ret?我已经很久没有使用过Asm了,以前也从来没有在C++里面使用过。

谢谢!

编辑:感谢@Matteo Italia,我已经纠正了ret的用法。

将 retval 放入eax登记册中,这是根据__cdecl__stdcall惯例。

然后,根据调用约定,应使用ret指令的相应变体:

  • 在约定(或类似)的情况下__cdecl - 使用 ret .在计算机级别,这意味着从堆栈中pop返回地址并jmp到堆栈。调用方负责从堆栈中删除所有函数参数。
  • 在约定(或类似)的情况下__stdcall - 使用ret X,而X是所有函数参数的大小。

最新更新