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

如何让objdump以兼容diff的方式显示跳转指令

解决objdump跳转指令兼容diff的方案

1. 用--adjust-vma统一符号基地址

直接在objdump命令中添加--adjust-vma=0x0参数,把所有段的显示地址偏移到0。这样不同构建版本的符号基地址都会被统一为0,diff对比时就不会因为基地址差异产生大量无关变动。

命令示例:

objdump -D --adjust-vma=0x0 your_binary > dump.txt

这个方法不需要修改原始二进制文件,就能保留跳转指令的偏移信息,完美解决你提到的「不同构建基地址破坏diff」的问题。

2. 把跳转偏移转成输出行号

如果需要将跳转指令中的<symbol+offset>转换成输出里的行号,可以通过两步实现:

  1. 先生成带行号的反汇编输出(如果之前--line-numbers耗时太长,只反汇编.text段能大幅提速):
objdump -d --line-numbers --section=.text your_binary > raw_dump.txt
  1. 用awk脚本处理输出,自动把跳转偏移映射到行号:
    保存以下脚本为jump_to_line.awk:
BEGIN {
    # 先扫描所有行,记录符号的起始地址和对应行号
    while ((getline < "raw_dump.txt") > 0) {
        if ($0 ~ /^[0-9a-f]+ <([^>]+)>:$/) {
            symbol = substr($2, 2, length($2)-2)
            sym_addr[symbol] = strtonum("0x" $1)
            sym_line[symbol] = NR
        }
        lines[NR] = $0
    }
    # 遍历每行,替换跳转偏移为目标行号
    for (i=1; i<=NR; i++) {
        line = lines[i]
        if (match(line, /ja <([^+]+)\+0x([0-9a-f]+)>/, m)) {
            symbol = m[1]
            offset = strtonum("0x" m[2])
            target_addr = sym_addr[symbol] + offset
            # 从符号起始行开始找目标地址对应的行
            for (j=sym_line[symbol]; j<=NR; j++) {
                if (match(lines[j], /^([0-9a-f]+):/, addr_m)) {
                    current_addr = strtonum("0x" addr_m[1])
                    if (current_addr >= target_addr) {
                        printf "%s # 跳转至行号 %d\n", line, j
                        next
                    }
                }
            }
            print line
        } else {
            print line
        }
    }
}

执行脚本处理输出:

awk -f jump_to_line.awk

处理后的结果会在跳转指令后标注对应的行号,diff时不会被干扰。

3. 替代--visualize-jumps的diff友好方案

如果需要跳转可视化又要兼容diff,可以用objdump -D --no-show-raw-insn生成简洁的反汇编内容,再用radiff2(r2工具链自带)做二进制对比。它能识别跳转逻辑的变化,不会被多余的可视化标记打乱diff视图:

radiff2 -a x86 -d old_dump.txt new_dump.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 04:05:25