我有一个棘手的问题,我今天一直在玩,但为此我还没有想出一个优雅的解决方案.
我们知道,表单的函数void func()需要无限多的参数.现在我已经整理了一个非常简单的最小工作代码片段:
#include <stdio.h>
int func()
{
printf("%d, %d, %d, %d\n");
return 0;
}
int func() {
sucks(0 /* Offset */, 1, 2, 3, 4);
}
Run Code Online (Sandbox Code Playgroud)
好的,我们现在可以使用尽可能多的参数调用func().我正在试验的问题是:我们如何正确访问这些论点的内容?printf()函数打印出类似这样的东西......只是为了验证参数是否实际存在:
anonymous@melina:/tmp$ ./a.out
1 2 3 4
Run Code Online (Sandbox Code Playgroud)
所以现在的问题是:上面的代码片段有点hackish.有没有正确的方法来访问这些参数?或者你是否真的要乱用堆栈指针和内联汇编?作为第一次尝试,我考虑将堆栈指针放在函数的开头,例如,
uint64_t sp;
asm( "mov %%rsp, %0" : "=rm" ( sp ));
Run Code Online (Sandbox Code Playgroud)
...并以某种方式使用它,猜测这些参数实际上在哪里(在内存中).但是......到目前为止我没有成功.
c ×1