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