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

如何用llvm-objdump拆解纯二进制文件?ARM工具是否可行?

二进制文件拆解问题

我通过以下命令将4个字节写入文件,并使用GNU工具链完成了拆解:

-bash$ echo -en '\x1f\x20\x03\xd5' > ./myFile
-bash$ aarch64-none-linux-gnu-objdump -m AARCH64 -b binary -D ./myFile

执行结果:

./myFile:     file format binary

Disassembly of section .data:

0000000000000000 <.data>:
   0:   d503201f    nop

注意,myFile并非标准ELF文件或目标文件,但GNU objdump仍可完成拆解。

请问如何使用llvm-objdump实现类似操作?我执行如下命令时出现报错:

-bash$ llvm-objdump --arch=arm64 -D x
.../llvm-16.0.4/bin/llvm-objdump: error: 'x': The file was not recognized as a valid object file

此外,使用ARM的armclang、armasm或fromelf是否可实现该需求?


解决方案

一、使用llvm-objdump拆解二进制文件

llvm-objdump需要显式指定文件格式为二进制,同时指定目标架构,正确命令如下:

llvm-objdump --arch=arm64 --file-format=binary -D ./myFile

也可以使用简写参数,和GNU objdump的参数风格保持一致:

llvm-objdump -m arm64 -b binary -D ./myFile

执行后即可得到和GNU objdump一致的指令拆解结果。

二、使用ARM工具链实现需求

1. fromelf(直接拆解)

ARM的fromelf工具支持直接处理原始二进制文件,命令格式如下:

fromelf --disassemble --architecture=AArch64 ./myFile

该命令会直接解析二进制字节流并输出对应的AArch64指令。

2. armclang+armasm(间接方式)

如果需要通过armclang和armasm组合处理,可按以下步骤操作:

  • 创建汇编源文件(如bytes.s),将目标字节以汇编伪指令定义:
.section .data
        .byte 0x1f, 0x20, 0x03, 0xd5
  • 使用armasm汇编生成目标文件:
armasm -cpu cortex-a53 -o bytes.o bytes.s
  • 再用fromelf拆解目标文件:
fromelf --disassemble bytes.o

这种方式相对繁琐,仅适用于需要将二进制字节整合到汇编流程中的场景,直接使用fromelf效率更高。


内容的提问来源于stack exchange,提问作者Lance E.T. Compte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:05:57