Idiomas: English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Français | Deutsch | Español | Italiano | Русский | العربية
Para lectores no familiarizados con ARM64, enfocado en instrucciones generadas por el compilador dyncode.
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.
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 → usarblr.
adr (±1MB), adrp+add (±4GB páginas). Equivalente a x86_64 lea rax, [rip+sym].
Secuencias mov + movk para valores de 64 bits. Núcleo de Data2TextPass: datos constantes como mov/movk en la pila.
ldr/str, ldp/stp, add/sub/and/orr/eor/lsr/lsl, cmp + ramas condicionales.
Cálculo puro, Fibonacci recursivo, inline de string en pila (Data2TextPass), syscall (SyscallStubPass svc directo).
| 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 |