Arm匯編學習筆記(一)——編寫編譯并執行簡單匯編文件

ARM 324瀏覽

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的內容被調用方需要保證其調用前和調用后的內容一樣。

七星彩走势图2元网官网