Skip to content

Latest commit

 

History

History
35 lines (24 loc) · 2.3 KB

dyncode-compiler-arm64-assembly-tutorial.md

File metadata and controls

35 lines (24 loc) · 2.3 KB

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

← Compilador de dyncode

Tutorial de ensamblaje ARM64 (AArch64) — Perspectiva DynCode

Para lectores no familiarizados con ARM64, enfocado en instrucciones generadas por el compilador dyncode.

1. Resumen de registros

Registros generales x0-x30 (64-bit) / w0-w30 (32-bit), sp, xzr/wzr, x29 (fp), x30 (lr). Apple ABI reserva x16-x18. Convención AAPCS64.

2. Ramas y llamadas

  • b (incondicional), bl (con enlace → relocalización BRANCH26), br/blr (indirecto), ret.
  • DynCode debe evitar bl: El enlazador llena el offset de 26 bits. DynCode no tiene enlazador → usar blr.

3. Direccionamiento relativo a PC

adr (±1MB), adrp+add (±4GB páginas). Equivalente a x86_64 lea rax, [rip+sym].

4. Carga de inmediatos

Secuencias mov + movk para valores de 64 bits. Núcleo de Data2TextPass: datos constantes como mov/movk en la pila.

5–7. Acceso a memoria, aritmética, comparaciones

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

8. Secuencias de instrucciones típicas generadas

Cálculo puro, Fibonacci recursivo, inline de string en pila (Data2TextPass), syscall (SyscallStubPass svc directo).

9. Resumen clave

Concepto x86_64 ARM64 DynCode
Llamada a función call rel32 bl imm26 Extractor parchea BRANCH26
Carga de dirección lea rax,[rip+sym] adrp+add PAGE21/PAGEOFF12 parcheados
Inmediato 64-bit mov rax,imm64 mov+movk ×4 Cero relocalizaciones
Syscall syscall svc #0x80 Darwin: x16=nr