gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:29:49 26 4
gpt4 key购买 nike

现在我正在设计一个函数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,而是将其留在那里。并且修改目标函数以忽略第一个参数,或者在调用目标函数之前将所有其他参数向左移动一个位置

关于c - 如何将带有可变参数的函数声明为 stdcall?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51583645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com