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

如何从带调试符号的ELF文件中根据指定地址提取对应源代码行

操作方法

你可以直接用objdump的地址范围过滤参数实现需求,不需要提前导出全量反汇编文件:

核心命令格式

objdump -S --start-address=<目标地址> --stop-address=<目标地址+1> <ELF文件路径>

参数说明:

  • -S:表示反汇编同时打印对应的源代码(要求ELF带-g编译的调试符号)
  • --start-address:指定反汇编的起始地址,填你要查询的目标内存地址
  • --stop-address:指定反汇编的结束地址,填目标地址+1即可,保证只反汇编目标地址的单条指令

对应示例的实操

你要查询地址0x6bf对应的源码,直接执行:

objdump -S --start-address=0x6bf --stop-address=0x6c0 main

输出结果会自动包含距离该地址最近的前序源码行,示例输出如下:

if (isPrime(p))
 6bf:   e8 86 ff ff ff          callq  64a <isPrime>

你直接提取输出中不以十六进制地址开头的行就是对应的源代码。

自动化提取脚本

如果需要直接输出源码行,可以用awk过滤结果:

# 把下面的0x6bf替换成你要查询的实际地址
objdump -S --start-address=0x6bf --stop-address=0x6c0 main | awk '/^ / && !/^ [0-9a-f]+:/ {src=$0} /^ *[0-9a-f]+:.*6bf/ {print src; exit}'

执行后直接输出:

if (isPrime(p))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:27:04