繁体   English   中英

如何声明带有可变参数的函数为stdcall?

[英]How to declare a function with variable arguments to be stdcall?

现在,我正在设计一个函数f(index,...) ,它将在传递其余参数的函数数组中调用#index条目。 如果您将函数数组视为服务列表,则f作用类似于服务分配器。

f用汇编语言编写。 它弹出第一个参数index然后计算相应的目标函数地址并对其进行jmp

如果我将n参数传递给f ,则从目标函数返回时,堆栈仅保留n-1个参数,因为index是在中间弹出的。 因此,我不能使用cdecl约定,否则调用者将错误地为n参数清除堆栈。

stdcall应该工作。 但是问题在于,由于f具有可变参数 ,因此gcc似乎__attribute__((stdcall)) f(index,...)不合理,并将其还原为cdecl

所以,请问有人可以告诉我如何将f声明为stdcall吗?

我认为使用stdcall不会解决您的问题,因为无论如何您都必须还原堆栈才能让函数在堆栈上找到返回地址。

与其从堆栈中弹出index ,不如将其保留在那里。 要么修改目标函数以忽略第一个参数,要么在调用目标函数之前将所有其他参数向左移动一个位置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM