【问题标题】:Instruction pointer to function name, input parameters, ?指向函数名、输入参数的指令指针,?
【发布时间】:2017-01-14 17:29:13
【问题描述】:

我正在尝试自己实现类似函数调用的回溯。我已经成功地展开堆栈并且我的堆栈上存在所有返回地址。现在我想从这些信息中获取函数名、变量名输入到我的函数中。我也想以编程方式执行此操作,即在运行时我应该能够获取有关到目前为止在我的程序中调用的所有函数的信息。 让我们假设我在编译时用 -g 标志编译我的很好。

我正在尝试使用 dladdr() 函数来获取函数名,但这不起作用。它给了我“错误:未知类型名称'Dl_info'”的错误。 这是我的代码 sn-p :

const char * get_func_name(void *ip){
        Dl_info info;
        int ret;
        ret = dladdr(ip,&info);
        if(ret < 0)
                return NULL;
        return info.dli_fname;
}

我尝试研究 bfd 库,但没有很好的示例/教程,有什么帮助吗? 我正在使用 ubunutu 14.04

【问题讨论】:

    标签: c linux operating-system gdb bfd


    【解决方案1】:

    根据手册页,一定要先#define _GNU_SOURCE#include &lt;dlfcn.h&gt;。此结构和dladdr() 是 GNU 扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多