Arm汇编学习笔记(一)——编写编译并执行简单汇编文件

ARM 191浏览

1. 简单编译汇编文件并查看

  • 建立一个test.S文件,并输入以下内容:

    mov r0, r1

  • 命令行下输入命令:

arm-linux-androideabi-as test.S -o test.o

得到test.o

  • 反汇编.o文件查看汇编代码,输入命令:

arm-linux-androideabi-objdump -d test.o

得到以下输出:

test.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <.text>:
   0:	e1a00001 	mov	r0, r1

  • 查看.o文件的符号表,输入命令:arm-linux-androideabi-nm test.o
  • 通过ida查看test.o,内容如下:

2. 编译独立的汇编文件为Android可执行文件并执行

  • 首先建立一个test.S文件,输入以下内容:
.global main

.text

main:
	stmfd sp!, {r11, lr}
	mov r0, #5
	ldmfd sp!, {r11, pc}

.end
  • 命令行输入下面命令得到test.o:
arm-linux-androideabi-as -k test.S -o test.o
其中参数定义:

-k                      generate PIC code

  • 然后命令行输入下面命令:
arm-linux-androideabi-ld test.o ~/Softwares/Android/android-ndk-r9d/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o ~/Softwares/Android/android-ndk-r9d/platforms/android-19/arch-arm/usr/lib/crtend_android.o  -l ~/Softwares/Android/android-ndk-r9d/platforms/android-19/arch-arm/usr/lib/libc.so -pie -I /system/bin/linker -o test.out
其中参数定义:

 -Ttext ADDRESS              Set the address of the text segment

 -l LIBNAME, --library LIBNAME Search for library LIBNAME

 -pie                        Create a position independent executable

 --pic-executable            Create a position independent executable

  -I PROGRAM, --dynamic-linker PROGRAM  Set dynamic linker path

  • 上面汇编代码的意义是main函数返回值为5,将test.out文件push到android系统中运行,查看运行返回值可以看到运行成功。

约定:

1. 在函数调用过程中,r0-r3的内容有可能发生变化,即被调用方不能保证其内容不变,r4-r9的内容被调用方需要保证其调用前和调用后的内容一样。