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

如何格式化汇编反汇编字符串 实现助记符列对齐提升可读性

反汇编代码助记符对齐方案

问题原因

你之前使用的格式化写法"{} {:<10} {:>10} {}\n"同时为操作码、助记符两个字段指定了对齐宽度,助记符的起始位置会叠加前两个字段的占位宽度,不同长度的操作码之后的助记符自然无法对齐。

实现逻辑

  1. 先遍历所有反汇编行,提取第二列的操作码,统计最长的操作码长度
  2. 设定操作码列的总宽度为「最长操作码长度 + 自定义固定留白间距」(示例中操作码最长为12位,加3个空格的留白,总宽度设为15即可)
  3. 所有行的操作码都左对齐填充到这个总宽度后,直接拼接指令和剩余内容,所有助记符自然处于同一垂直位置。

Python 实现示例

# 输入的反汇编内容
disasm_text = """0x00000000 ebc4 jmp 0x-0000003a 0
0x00000002 30b9aaad03f0 xor byte [ecx - 268194390],bh 2
0x00000008 bcebd9b87a mov esp,0x7ab8d9eb 8
0x0000000d b182 mov cl,130 13
0x0000000f 3bbd98607e3c cmp edi,dword [ebp + 1014915224] 15
0x00000015 3229 xor ch,byte [ecx] 21
0x00000017 3c01 cmp al,1 23
0x00000019 25040bbe7d and eax,0x7dbe0b04 25
0x0000001e 13fd adc edi,ebp 30
0x00000020 b48d mov ah,141 32
0x00000022 af scasd  34
0x00000023 2f das  35
0x00000024 34a4 xor al,164 36
0x00000026 02929d1302a3 add dl,byte [edx - 1560144995] 38
0x0000002c 9c pushfd  44
0x0000002d 90 nop  45
0x0000002e 90 nop  46
0x0000002f 90 nop  47"""

# 预处理解析每行内容,统计最长操作码长度
max_opcode_len = 0
parsed_lines = []
for line in disasm_text.split('\n'):
    # 最多拆分为4段,避免指令内部的空格被拆分
    parts = line.split(maxsplit=3)
    if len(parts) < 3:
        continue
    addr, opcode, rest = parts[0], parts[1], ' '.join(parts[2:])
    parsed_lines.append((addr, opcode, rest))
    if len(opcode) > max_opcode_len:
        max_opcode_len = len(opcode)

# 操作码列总宽度 = 最长操作码长度 + 3个空格的固定间距
opcode_col_width = max_opcode_len + 3

# 格式化输出
for addr, opcode, rest in parsed_lines:
    print(f"{addr} {opcode:<{opcode_col_width}}{rest}")

最终输出效果

0x00000000 ebc4         jmp 0x-0000003a 0
0x00000002 30b9aaad03f0 xor byte [ecx - 268194390],bh 2
0x00000008 bcebd9b87a   mov esp,0x7ab8d9eb 8
0x0000000d b182         mov cl,130 13
0x0000000f 3bbd98607e3c cmp edi,dword [ebp + 1014915224] 15
0x00000015 3229         xor ch,byte [ecx] 21
0x00000017 3c01         cmp al,1 23
0x00000019 25040bbe7d   and eax,0x7dbe0b04 25
0x0000001e 13fd         adc edi,ebp 30
0x00000020 b48d         mov ah,141 32
0x00000022 af           scasd  34
0x00000023 2f           das  35
0x00000024 34a4         xor al,164 36
0x00000026 02929d1302a3 add dl,byte [edx - 1560144995] 38
0x0000002c 9c           pushfd  44
0x0000002d 90           nop  45
0x0000002e 90           nop  46
0x0000002f 90           nop  47

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:06