objdump按照指定架构反汇编 裸二进制文件
程序员文章站
2022-07-01 23:26:15
...
objdump按照指定架构反汇编 裸二进制文件
因为某些特殊原因,不会把汇编代码直接编译成一个完整的可执行文件,直接编译成纯二进制的文件,以便读到内存中,供其他程序执行使用。例如:
/prj1$ cat bin.S
.globl _start
.code16
_start:
mov $0x3f8, %dx
add %bl, %al
add $'0', %al
out %al, (%dx)
mov $'\n', %al
out %al, (%dx)
使用如下命令,编译成相应架构下的字节文件:
as -32 bin.S -o bin.o
ld -m elf_i386 --oformat binary -N -e _start -Ttext 0x10000 -o Bin.bin bin.o
如果这个文件是别人发送个你的,你想知道这个文件具体是在做什么话,可以写一个程序,把这个文件读内存中,gdb调试一下,就知道这个文件中的代码是干啥的。有时候,这样也不是很方便,我们可以采用objdump
直接反汇编。由于bin.bin
并没有编程成相应的可执行文件格式,所以objdump -S bin.bin
是会失败的,如下所示:
/prj1$ objdump -S bin.bin
objdump: bin.bin: 不可识别的文件格式
我们查一下,本机的objdump
支持哪些指令架构,直接objdump --help
就可以看到:
objdump:支持的目标: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 plugin srec symbolsrec verilog tekhex binary ihex
objdump:支持的体系结构: i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel i386:nacl i386:x86-64:nacl i386:x64-32:nacl iamcu iamcu:intel l1om l1om:intel k1om k1om:intel plugin
下列 i386/x86-64 特定的反汇编器选项在使用 -M 开关时可用(使用逗号分隔多个选项):
x86-64 Disassemble in 64bit mode
i386 Disassemble in 32bit mode
i8086 在 16 位模式下反汇编
att 用 AT&T 语法显示指令
intel 用 Intel 语法显示指令
att-mnemonic
Display instruction in AT&T mnemonic
intel-mnemonic
Display instruction in Intel mnemonic
addr64 假定 64 位地址大小
addr32 假定 32 位地址大小
addr16 假定 16 位地址大小
data32 假定 32 位数据大小
data16 假定 16 位数据大小
suffix 在 AT&T 语法中始终显示指令后缀
amd64 Display instruction in AMD64 ISA
intel64 Display instruction in Intel64 ISA
因为我们知道,这个文件是按照 i386汇编搞的,所以我们直接如下操作就行了:
/prj1$ objdump -m att -b binary -D bin.bin
bin.bin: 文件格式 binary
objdump: can't use supplied machine att
/prj1$ objdump -m i386 -b binary -D bin.bin
bin.bin: 文件格式 binary
Disassembly of section .data:
00000000 <.data>:
0: ba f8 03 00 d8 mov $0xd80003f8,%edx
5: 04 30 add $0x30,%al
7: ee out %al,(%dx)
8: b0 0a mov $0xa,%al
a: ee out %al,(%dx)
att
方式是不对,反汇编失败
按照i386
强行反汇编二进制文件。
上一篇: ASP.NET(C#)-JAVA对接RSA加密签名-第四讲
下一篇: 这是手过千遍啊