从ARM的汇编代码到二进制文件
2010-07-02 15:43
453 查看
首先声明,本文仅包括了ARM从汇编代码到二进制文件的转化过程,用于对二进制码的模拟分析,不可做执行文件使用。
写好汇编源文件1.s
$vi 1.s
.global add @ give the symbol add external linkage
add:
ADD r0, r0, r1 @ add input arguments
MOV pc, lr @ return from subroutine
@ end of program
其中这只是表示生成一个可供C语言调用的函数接口,本身不带main入口,只能生成.o文件
$arm-linux-gcc -c -o 1.o 1.s
得到1.o这个文件
$arm-linux-objdump -x -d -S 1.o 反汇编
1.o: file format elf32-littlearm
1.o
architecture: arm, flags 0x00000010:
HAS_SYMS
start address 0x00000000
private flags = 0: [APCS-32] [FPA float format]
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000008 00000000 00000000 00000034 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00000000 00000000 0000003c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 0000003c 2**0
ALLOC
SYMBOL TABLE:
00000000 l d .text 00000000 .text
00000000 l d .data 00000000 .data
00000000 l d .bss 00000000 .bss
00000000 g .text 00000000 add
Disassembly of section .text:
00000000 <add>:
0: e0800001 add r0, r0, r1
4: e1a0f00e mov pc, lr
然后把提取1.o这个文件的.text段,
$arm-linux-objcopy -O binary -j .text 1.o 1.bin
$ls -la
-rw-r--r-- 1 wyc wyc 8 2010-07-02 15:00 1.bin
-rw-r--r-- 1 wyc wyc 488 2010-07-02 14:54 1.o
-rw-r--r-- 1 wyc wyc 146 2010-07-02 14:49 1.s
最后提出来的1.bin只有8个字节,是由于text段中仅包含了两条指令。
$od -x 1.bin
0000000 0001 e080 f00e e1a0
0000010
0: e0800001 add r0, r0, r1
4: e1a0f00e mov pc, lr
写好汇编源文件1.s
$vi 1.s
.global add @ give the symbol add external linkage
add:
ADD r0, r0, r1 @ add input arguments
MOV pc, lr @ return from subroutine
@ end of program
其中这只是表示生成一个可供C语言调用的函数接口,本身不带main入口,只能生成.o文件
$arm-linux-gcc -c -o 1.o 1.s
得到1.o这个文件
$arm-linux-objdump -x -d -S 1.o 反汇编
1.o: file format elf32-littlearm
1.o
architecture: arm, flags 0x00000010:
HAS_SYMS
start address 0x00000000
private flags = 0: [APCS-32] [FPA float format]
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000008 00000000 00000000 00000034 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00000000 00000000 0000003c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 0000003c 2**0
ALLOC
SYMBOL TABLE:
00000000 l d .text 00000000 .text
00000000 l d .data 00000000 .data
00000000 l d .bss 00000000 .bss
00000000 g .text 00000000 add
Disassembly of section .text:
00000000 <add>:
0: e0800001 add r0, r0, r1
4: e1a0f00e mov pc, lr
然后把提取1.o这个文件的.text段,
$arm-linux-objcopy -O binary -j .text 1.o 1.bin
$ls -la
-rw-r--r-- 1 wyc wyc 8 2010-07-02 15:00 1.bin
-rw-r--r-- 1 wyc wyc 488 2010-07-02 14:54 1.o
-rw-r--r-- 1 wyc wyc 146 2010-07-02 14:49 1.s
最后提出来的1.bin只有8个字节,是由于text段中仅包含了两条指令。
$od -x 1.bin
0000000 0001 e080 f00e e1a0
0000010
0: e0800001 add r0, r0, r1
4: e1a0f00e mov pc, lr
相关文章推荐
- 交叉编译生成ARM汇编和反汇编二进制文件生成ARM汇编(指定ARM架构及cpu类型)
- 交叉编译生成ARM汇编和反汇编二进制文件生成ARM汇编(指定ARM架构及cpu类型)
- gdb:如果在没有符号表的时候让gdb强制以thumb模式反汇编ARM二进制代码
- 使用Idaq工具查看可执行文件ARM汇编代码
- 如何生成汇编代码文件
- ARM的BIN文件反汇编方法
- 汇编代码之修改文件时间
- 产生指定源程序文件的汇编代码
- Oolong工具:.class二进制文件反编译为.j汇编文件
- ARM周立功模板启动代码中断处理文件IRQ.s的中文解释
- 在iPhone项目中放入汇编文件,并用C与汇编代码混
- Java 查看class文件的汇编代码
- 把 汇编代码翻译成二进制机器代码
- Arm汇编 位置无关代码 adr 指令
- ARM周立功模板启动代码中断处理文件IRQ.C的中文解释
- arm 汇编语言源码文件分析
- arm蛋疼汇编part 10--与位置有关代码 与位置无关代码
- VS2010及gcc中C/C++代码生成为汇编文件的方法
- 为什么ARM的启动代码是汇编?
- DOS时代的回忆,贴一段10年前本人写的二进制编辑器汇编代码