【问题标题】:Getting caller function name from the function address从函数地址获取调用者函数名
【发布时间】:2019-09-07 04:41:58
【问题描述】:

我已经通过添加以下打印打印了U-boot中函数的地址。

  printf("initcall: %pS \n", (char *)*init_fnc_ptr - reloc_ofs);

通过添加调试打印打印以下行。有没有办法从函数地址知道函数名。

  initcall: 80809c05

【问题讨论】:

  • 在 U-boot 中我们不会有 /proc/,backtrace() 在 U-boot 中也不可用。
  • 减去加载地址然后查找编译后二进制的符号表
  • 关于示例输出:“initcall: 80809c05” 这不是发布代码的输出,因为对printf() 的调用在地址后有一个“S”。
  • 输出格式说明符需要void*,而不是char*

标签: c u-boot


【解决方案1】:

在构建 U-Boot 时会写入一个文件 u-boot.map。您可以在那里查找函数的地址(重定位之前)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多