在函数内部,如何获取其返回地址?
发布时间:2020-12-16 07:14:59 所属栏目:百科 来源:网络整理
导读:我正在寻找一个从中调用此函数的内存位置列表.这段代码是否正确?怎么可以改进?假设整数,长整数和指针是4个字节,char是1个字节.假设没有执行编译器优化.假设函数使用/设置其参数,返回值和局部变量. void * CalledFromArray[ARRAY_SIZE];int CallerRecorder(
我正在寻找一个从中调用此函数的内存位置列表.这段代码是否正确?怎么可以改进?假设整数,长整数和指针是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) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |