日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Aarch64汇编语言

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Aarch64汇编语言 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從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)從用戶模式到管理模式的切換。例如:

mov x0, 123 // exit code mov x8, 93 // sys_exit() is at index 93 in kernel functions table svc #0 // generate kernel call sys_exit(123);

關(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é)尾:

STP X24, X23, [SP,#var_40]! STP X22, X21, [SP,#0x40+var_30] STP X20, X19, [SP,#0x40+var_20] STP X29, X30, [SP,#0x40+var_10] ADD X29, SP, #0x40+var_10 .... SUB SP, X29, #0x30 LDP X29, X30, [SP,#0x150+var_120] LDP X20, X19, [SP,#0x150+var_130] LDP X22, X21, [SP,#0x150+var_140] LDP X24, X23, [SP+0x150+var_150],#0x40 RET

參考文獻(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)

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Aarch64汇编语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。