You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从perf.data重构带真实运行时地址的PIE可执行文件

实现带运行时真实地址的类perf annotate输出方案

方案1:使用perf annotate原生参数(最简便)

perf本身自带显示虚拟地址的参数,无需额外工具:

  • 采样阶段正常执行带分支栈的录制:
    perf record -b -g ./your_target_binary
  • 注释阶段添加--show-addr和--asm-raw参数即可输出带真实运行时虚拟地址的汇编列表,格式和objdump完全一致,同时附带采样计数:
    perf annotate --show-addr --asm-raw <可选:指定目标函数名>
  • 如果要完全跳过objdump调用,使用perf内置的汇编解析逻辑,可以额外添加--objdump=""参数,5.8及以上内核版本均支持该特性。

方案2:perf script二次加工(高自定义)

如果需要自定义输出格式,可以基于你已经拿到的brstack数据处理:

  • 执行导出命令拿到全量原始地址和指令数据:
    perf script -F ip,sym,brstack -D > perf_raw_dump.txt
  • 用简单的awk或python脚本对相同函数内的地址做升序排序,合并同一地址的采样计数,再按地址顺序输出地址、采样数、汇编指令即可得到自定义格式的类objdump输出。

方案3:使用bcc工具集(无perf依赖)

Ubuntu 20.04官方源自带的bcc工具集也可以实现该需求:

  • 先安装依赖:
    apt install -y bcc bcc-tools linux-headers-$(uname -r)
  • 使用funccount工具的地址统计功能:
    funccount -a -r '^your_function_name$' -d <采样时长秒数> ./your_target_binary
  • 输出会直接返回每个指令运行时地址的命中次数,和objdump的汇编输出做地址匹配即可得到带采样数据的注释结果。

注意:你使用的5.11内核和Ubuntu 20.04环境已经原生支持上述所有功能,无需编译内核或上游工具源码。

内容的提问来源于stack exchange,提问作者Noah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:54:06