在函数内部,如何获取其返回地址?

时间:2015-12-22 17:11:05

标签: c stack function-pointers memory-address

我正在寻找一个从中调用此函数的内存位置列表。这段代码是否正确?怎么可以改进?假设整数,长整数和指针是4个字节,char是1个字节。假设没有执行编译器优化。假设函数使用/设置其参数,返回值和局部变量。

void * CalledFromArray[ARRAY_SIZE];
int CallerRecorder(int i)
{
 int LocalVar1;
 int LocalVar2;
 CalledFromArray[i]=(void *) *( (long int *)(  (char *)&LocalVar2 + 36 )  );
 return 0;
}

1 个答案:

答案 0 :(得分:1)

我不确定这背后的真正目的是什么。但只是一个想法,如果你正在使用GCC。 也许你可以收集调用你的函数的函数名。出于这个原因,我会重命名你的函数,然后添加一个额外的参数const char* const pFunction,并创建一个带有函数原始名称的宏来调用通过__FUNCTION__的新函数。然后,下一步是使用dlsym来搜索调用函数的地址。

#define CallerRecorder(var) CallerRecorderNew((var), __FUNCTION__)

int CallerRecorderNew(int i, const char* const pFunction)
{
    // dlsym(..., pFunction)
}