您的位置:首页 > 编程语言

从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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息