【发布时间】:2018-07-29 19:08:46
【问题描述】:
现在我正在设计一个函数f(index,...),它将调用函数数组中的 #index 条目并传递其余参数。如果您将函数数组视为服务列表,f 就像一个服务分发器。
f 是用汇编语言编写的。它弹出第一个参数index,然后计算出对应的目标函数地址和jmp到它。
如果我将n 参数传递给f,则在从目标函数返回时,堆栈只会保存n-1 参数,因为index 在中途弹出。因此,我不能使用cdecl 约定,否则调用者会错误地清理堆栈中的n 参数。
stdcall 应该可以工作。但问题是,由于f 有可变参数,gcc 似乎__attribute__((stdcall)) f(index,...) 不合理并将其恢复为cdecl。
那么请谁能告诉我如何将f 声明为stdcall?
【问题讨论】:
标签: c gcc calling-convention stdcall