Also nahm ich Montage Programmierung. Auf meiner Ubuntu-Box ist das ganz einfach: Mit NASMamd GNU ld konnte ich in einer halben Stunde mehr oder weniger komplizierte HelloWorld-Programme schreiben. Aber wenn es um das iPhone geht, ist es so kompliziert. Als erstes habe ich ein JB'en iPhone 3G auf der Firmware 4.2.1, was bedeutet, dass ich den ARM-Port des Darwin-Kernels v10 benutze. Sekunde. Ich muss GNU als verwenden, da es kein NASM für iPhone gibt: die native Toolchain (sowohl Xcode unter Mac OS X als auch die Opensource tooolchain unter Linux) verwenden GCC. So habe ich grundlegende Informationen gesammelt über: - wie man Assembly in GNU als Sprache schreiben; - Was sind die grundlegenden ARM-Anweisungen, Register, Speicherzugriff.ARM Darwin Assembly - Suche nach Systemaufrufen (Tutorial vielleicht)
Aber auch HelloWorld benötigt Kernel-Aufrufe zum Schreiben auf stdout. Meine Frage ist: welcher Kernel-Aufruf zu verwenden ist und wie (welche Argumente wohin gehen); Ich sollte die Anweisung swi # ARM verwenden, oder?
Also, können Sie bitte einige Informationen/Links zu Tutorials, oder jemand mit einem ARM Darwin Hello World Asm Code?
Ab jetzt konnte ich dies tun:
;Hello World for Linux and NASM
section data
hello db "Hello World"
helloLen equ $ - hello
section text
global _start
_start:
mov eax, 4 ; sys_write
mov ebx, 1 ; to stdout
mov ecx, hello ; address of string
mov edx, helloLen ; value (because of eq!!!) of strLen
int 0x80 ; call awesome Linux kernel
mov eax, 1 ; sys_exit
mov ebx, 0 ; "return 0; " if you like C
int 0x80 ; call kernel to end program
auf ARM, jedoch konnte ich nur tun, wie folgt:
.text
start:
mov r0, #0
mov r1, #234
add r2, r0, r1
@all mov and add and other stuff works fine
swi #0xc00
@all that I get is Bad system call error
So jemand bitte?
Eine gute Sache, die Sie tun können GCC mit der -S-Flag ausgeführt werden, die geben wird Sie Assembly-Ausgabe, die Sie sehen können, um zu sehen, wie es geht. –
Danke, leider habe ich das versucht, aber ich habe nur ziemlich "verschleierten" Code, was auf _printf in libgcc verwiesen wurde. Darf ich die __asm __() C-Funktion verwenden, um Inline-ASM nach Intel in ARM-Code umzuwandeln? (Ich werde es versuchen). – H2CO3