objdump按照指定架构反汇编 裸二进制文件
objdump按照指定架构反汇编 裸二进制文件
因为某些特殊原因,不会把汇编代码直接编译成一个完整的可执行文件,直接编译成纯二进制的文件,以便读到内存中,供其他程序执行使用。例如:
/prj1$ cat bin.S
.globl _start.code16
_start:mov $0x3f8, %dxadd %bl, %aladd $'0', %alout %al, (%dx)mov $'\n', %alout %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 modei386 Disassemble in 32bit modei8086 在 16 位模式下反汇编att 用 AT&T 语法显示指令intel 用 Intel 语法显示指令att-mnemonicDisplay instruction in AT&T mnemonicintel-mnemonicDisplay instruction in Intel mnemonicaddr64 假定 64 位地址大小addr32 假定 32 位地址大小addr16 假定 16 位地址大小data32 假定 32 位数据大小data16 假定 16 位数据大小suffix 在 AT&T 语法中始终显示指令后缀amd64 Display instruction in AMD64 ISAintel64 Display instruction in Intel64 ISA
因为我们知道,这个文件是按照 i386汇编搞的,所以我们直接如下操作就行了:
/prj1$ objdump -m att -b binary -D bin.bin bin.bin: 文件格式 binaryobjdump: can't use supplied machine att
/prj1$ objdump -m i386 -b binary -D bin.bin bin.bin: 文件格式 binaryDisassembly of section .data:00000000 <.data>:0: ba f8 03 00 d8 mov $0xd80003f8,%edx5: 04 30 add $0x30,%al7: ee out %al,(%dx)8: b0 0a mov $0xa,%ala: ee out %al,(%dx)
att
方式是不对,反汇编失败
按照i386
强行反汇编二进制文件。
objdump按照指定架构反汇编 裸二进制文件相关推荐
- 反汇编工具objdump的使用以及反汇编文件的解读
什么是反汇编 反汇编顾名思义就是汇编的逆过程,将二进制文件反汇编成汇编代码.arm-linux-objdump是交叉编译工具链里的一个工具,专门用来反汇编的,将二进制代码反汇编成汇编代码来查看. 为什 ...
- objdump反汇编用法示例
objdump反汇编用法示例 原文:http://blog.csdn.net/zoomdy/article/details/50563680 -d:将代码段反汇编 -S:将代码段反汇编的同时,将反汇编 ...
- c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...
目录 - C语言源码文件:sum.c - gcc 生成的汇编语言文件 sum.s x86-64 AT&T 语法格式 x86-64 Intel格式 - 反汇编 objdump 3.1 输出 AT ...
- objdump(Linux)反汇编命令使用指南
1 objdump反汇编示例 1.1 显示```main.c```的汇编代码 1.2 目标文件反汇编 1.3 可执行文件反汇编 1.4 objdump反汇编常用参数 2 objdump帮助信息 3 参 ...
- linux gcc反汇编,objdump(Linux)反汇编命令使用指南
1 objdump反汇编示例 1.1 显示main.c的汇编代码 1.2 目标文件反汇编 1.3 可执行文件反汇编 1.4 objdump反汇编常用参数 2 objdump帮助信息 3 参考资料 1 ...
- 【CMAKE】指定编译器架构(x86 or x64)
1.Windows vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir ...
- 服务器物理架构,裸金属服务器架构介绍
最近看到很多文章介绍裸机云.云原生等相关知识,今天和大家介绍一下原生架构,希望可以帮助大家理解裸机云原生架构或裸金属服务器架构. 原生架构又称为裸金属架构,它将Hypervisor直接安装在硬件上,将 ...
- (转)逆向与反汇编工具
第 1 章 逆向与反汇编工具 了解反汇编的一些背景知识后,再深入学习IDA Pro之前,介绍其他一些用于二进制文件的逆向工程工具,会对我们学习有所帮助.这些工具大多在IDA之前发布 ...
- objdump命令的使用
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump -f test 显示test的文件头信息 obj ...
最新文章
- 如何在ActionScript 3中将“ Null”(真实的姓氏!)传递给SOAP Web服务
- 容器中构建镜像慢,在dockerfile中换源加速
- nginx端合并JS
- 开源开放 | 熵简科技 AI Lab 开源金融领域中文预训练语言模型 FinBERT
- Java并发编程实战~volatile
- [BZOJ 5072]小A的树
- 好的软件人员必看的书
- ubuntu linux 下 adb 连接andoid 设备
- JavaScript实现碰撞检测(分离轴定理)
- [转]MySQL索引背后的数据结构及算法原理
- case when then else end 用法
- 英特尔:5G将释放云的潜力,为垂直行业带来巨大商机
- 卸载VS2005不完全出现的安装问题
- python实现反向传播_如何反向链接列表? (C和Python实现)
- jmeter性能测试实战——基础篇
- leancloud上传图片js_leanCloud上传多个图片保存到一个数组中的疑惑
- ue4 unreal4 自定义网格 绘制自定义网格 绘制面 (Plus)
- 低代码开发平台是什么?
- MCE | 表观遗传:YTHDF蛋白调节 m6A-RNA
- 【智能优化算法-热交换算法】基于热交换优化算法求解多目标优化问题附matlab代码