如何在C或ASM中获取调用函数的传入参数

时间:2014-03-03 12:31:42

标签: c x86

我想从函数 B 中的调用函数 A 的传入参数中访问数据。有办法吗?

#define get_caller_incoming_arg(call) 0
void B(int z)
{
    int _arg0  = get_caller_incoming_arg(0);
    printf ("in A(arg0): %x\n", _arg0);
    printf ("in B: %x\n", z);
}

void A(int x)
{
    int buff[10];

    for (int i = 0; i < 10; ++i)
        buff[i] = i + 5;

    B(buff[1]);
}

int main(int argc, const char * argv[])
{
    A(0xdeadbeef);
    return 0;
}

目标机器是运行OSX的x86_64,编译器是clang

1 个答案:

答案 0 :(得分:0)

尝试创建一个全局变量,然后将参数值传递给该变量,如代码

中所示
#define get_caller_incoming_arg(call) 0
int value=0;
void B(int z)
{
 int _arg0  = get_caller_incoming_arg(0);
 int valueofA=value;
 printf ("in A(arg0): %x\n", _arg0);
 printf ("in B: %x\n", z);
}

void A(int x)
{
 int buff[10];
 value=x;
 for (int i = 0; i < 10; ++i)
    buff[i] = i + 5;

 B(buff[1]);
}

int main(int argc, const char * argv[])
{
  A(0xdeadbeef);
  return 0;
}