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

我正在寻找一个从中调用此函数的内存位置列表.这段代码是否正确?怎么可以改进?假设整数,长整数和指针是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;
}

最佳答案 我不确定这背后的真正目的是什么.但只是一个想法,如果你使用GCC.

也许你可以收集调用你的函数的函数名.出于这个原因,我会重命名你的函数,然后添加一个额外的参数const char * const pFunction,并创建一个带有函数原始名称的宏来调用传递__FUNCTION__的新函数.然后下一步将使用dlsym来搜索调用函数的地址.

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

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