Aarch64汇编语言
從ARMv8-A開(kāi)始出現(xiàn)了64位的ARM指令集, ARM官方將64位的ARM指令集叫做Aarch64
Aarch64匯編中寄存器
Aarch64微處理器中,程序員可以使用31個(gè)64位的通用寄存器x0 ~ x30,堆棧指針寄存器sp,指令指針寄存器pc。也可以只使用這些通用寄存器中的低32位,即w0~w30,wsp。ARM遵循ATPCS規(guī)則,Aarch64匯編語(yǔ)言函數(shù)前8個(gè)參數(shù)使用x0-x7寄存器(或w0-w7寄存器)傳遞,多于8個(gè)的參數(shù)均通過(guò)堆棧傳遞,并且返回值通過(guò)x0寄存器(或w0寄存器)返回。
在使用軟中斷進(jìn)行系統(tǒng)調(diào)時(shí),系統(tǒng)調(diào)用號(hào)通過(guò)x8寄存器傳遞,用svc指令產(chǎn)生軟中斷,實(shí)現(xiàn)從用戶模式到管理模式的切換。例如:
關(guān)于系統(tǒng)調(diào)用syscall的系統(tǒng)調(diào)用號(hào)索引可以查看這里
https://elixir.bootlin.com/linux/latest/source/arch/sh/include/uapi/asm/unistd_64.h
Aarch64匯編語(yǔ)言
Aarch64匯編指令集所有指令的長(zhǎng)度固定,每條指令是4字節(jié)(32位寬度),并且沒(méi)有Thumb指令集。
訪存指令
ARM32中的LDM、STM、PUSH、POP指令,在Aarch64中并不存在。取而代之的是LDP、STP指令,如一般在函數(shù)開(kāi)頭用來(lái)代替PUSH.
例如,用IDA Pro逆向的某個(gè)Aarch64SO庫(kù)函數(shù)的開(kāi)頭和結(jié)尾:
參考文獻(xiàn)
arm64匯編語(yǔ)言
Wiki ARM Architecture
Aarch64 Register and Instruction Quick Start
ARM The Architecture for the Digital World
淺析基于ARM的Linux下的系統(tǒng)調(diào)用的實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的Aarch64汇编语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: IDA+GDB远程调试android平台
- 下一篇: 网鼎杯2020 朱雀部分writeup