assembly - raspberry - ¿El programa GAS ARM(linux) más corto posible?
ensamblador en raspberry pi (2)
Hay alguna información sobre las llamadas al sistema en http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=3105/4 . También puede consultar la página 5 de http://isec.pl/papers/into_my_arms_dsls.pdf .
He jugado con la idea de aprender un lenguaje ensamblador, y he decidido probar ARM. Decidí ir con el ensamblador GNU, principalmente porque está disponible en el repositorio de mi teléfono celular, para poder jugar con el ensamblaje en cualquier parte, si estoy aburrido.
De todos modos, he buscado en la web, pero no encuentro ningún tipo de referencia sobre cómo salir correctamente de un binario de ARM Linux. Entendí que el equivalente x86 básicamente establece el registro eax en un número que especifica la llamada al sistema, y luego llama a la interrupción del sistema 0x80 para realmente realizar la llamada al sistema, salir del programa correctamente; ahora quiero hacer algo similar para ARM (y obviamente el mismo código no funciona, ya que usa registros específicos x86 y otras cosas).
Entonces, básicamente, ¿cómo escribiría un ejecutable GAS ARM mínimo, simplemente saliendo normalmente con el valor de salida 0?
.global _start
.thumb_func
_start:
mov r0, #42
mov r7, #1
svc #0
CROSS_COMPILE?=arm-linux-gnueabihf-
teensy:
$(CROSS_COMPILE)as teensy.s -o teensy.o
$(CROSS_COMPILE)ld teensy.o -o teensy
ls -l teensy
$(CROSS_COMPILE)objdump -d teensy.o
$(CROSS_COMPILE)readelf -W -a teensy
clean:
rm teensy teensy.o