加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间: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)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读