直接从堆栈获取变量参数

Xaq*_*aqq 5 c

我正在玩堆栈和函数的调用参数.我想在这里实现的是直接使用堆栈获取变量参数的值.

当我不使用变量参数时,它工作(或似乎工作)很好.这是什么工作:

void test(int a, int b)
{
  unsigned char *ptr;
  int i;

  ptr = (unsigned char*)&a;
  for (i = 0; i < 4; i++)
    {
      printf("%d,", *ptr);
    }    
}
Run Code Online (Sandbox Code Playgroud)

这有效,我可以检索b的值; 使用相同的代码

void test(int a, ...);
Run Code Online (Sandbox Code Playgroud)

因为函数的原型不起作用.

我不明白这里发生了什么.

你能帮助我吗?谢谢 !

编辑:好的,然后它看起来没有稳定可靠的方式来做我自己的那种东西.让我们说在callee函数中我知道变量参数的数据大小(但不是类型),有没有办法抓住它们?

vro*_*nov 1

在带有 ... 的函数中,您可以使用 va_* 宏

void test(int a, ...) {
  va_list ap;
  va_start(ap, a);
  // Your code
  va_end(ap);    
}
Run Code Online (Sandbox Code Playgroud)