假设我将四个字节放入一个文件中,然后使用 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文件或目标文件,但我仍然可以反汇编它!
我怎样才能用
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
执行我想要的操作?
想通了。 关键是使用
objcopy
将原始二进制数据转换为ELF。 然后LLVM的objdump
就可以反汇编了...
-bash$ echo -en '\x1f\x20\x03\xd5' > ./myFile
-bash$ /path/to/llvm-16.0.4/bin/llvm-objcopy \
-I binary \
-O elf64-littleaarch64 \
--rename-section=.data=.text,code \
./myFile \
./myFile.elf
-bash$ /path/to/llvm-16.0.4/bin/llvm-objdump \
--arch=arm64 \
--disassemble \
./myFile.elf
myFile.elf: file format elf64-littleaarch64
Disassembly of section .text:
0000000000000000 <_binary___myFile_start>:
0: d503201f nop