Skip to content

Latest commit

 

History

History
35 lines (24 loc) · 1.89 KB

File metadata and controls

35 lines (24 loc) · 1.89 KB

Sprachen: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية

← DynCode-Compiler

ARM64 (AArch64) Assembly-Tutorial — DynCode-Perspektive

Für Leser, die mit ARM64 nicht vertraut sind, mit Fokus auf vom DynCode-Compiler generierte Befehle. Jeder Befehl enthält Anmerkungen und Vorher/Nachher-Vergleiche.

1. Register-Überblick

Allgemeine Register x0-x30 (64-bit) / w0-w30 (32-bit), sp, xzr/wzr, x29 (fp), x30 (lr). Apple ABI reserviert x16-x18. AAPCS64 Aufrufkonvention.

2. Verzweigungen und Aufrufe

  • b (unbedingt), bl (mit Link → BRANCH26 Relocation), br/blr (indirekt), ret.
  • DynCode muss bl vermeiden: Linker füllt 26-Bit-Offset. DynCode hat keinen Linker → blr verwenden.

3. PC-relative Adressierung

adr (±1MB), adrp+add (±4GB Seiten). Äquivalent zu x86_64 lea rax, [rip+sym].

4. Immediate-Laden

mov + movk Sequenzen für 64-Bit-Werte. Data2TextPass-Kern: Konstantendaten als mov/movk auf Stack.

5–7. Speicherzugriff, Arithmetik, Vergleiche

ldr/str, ldp/stp, add/sub/and/orr/eor/lsr/lsl, cmp + bedingte Verzweigungen.

8. Typische generierte Befehlsfolgen

Reine Berechnung, rekursive Fibonacci, String-Stack-Inlining (Data2TextPass), Syscall (SyscallStubPass direkte svc).

9. Zusammenfassung

Konzept x86_64 ARM64 DynCode
Funktionsaufruf call rel32 bl imm26 Extraktor patcht BRANCH26
Adressladen lea rax,[rip+sym] adrp+add PAGE21/PAGEOFF12 gepatcht
64-Bit-Immediate mov rax,imm64 mov+movk ×4 Null Relocations
Syscall syscall svc #0x80 Darwin: x16=nr