Mac OS 10.5.2
-
.section .data hello: .ascii "Hello World!\n" .section .text .globl _start _start: mov $4, %eax # 4 fuer den Syscall 'write' mov $1, %ebx # File Descriptor mov $hello, %ecx # Speicheradresse des Textes mov $13, %edx # Laenge des Textes int $0x80 # und los mov $1, %eax # das mov $0, %ebx # uebliche int $0x80 # beenden
Wie muss dieser Code unter Leopard aussehen? Ich habe bereits auf der Apple Seite nachgeschaut aber nicht gefunden, was mir weiterhilft.
Hinweis: Ich bin Assembler Neuling
Danke
LittleGamer3
-
ich denk mal genauso, wenns nen intel mac ist
-
mr jobs schrieb:
ich denk mal genauso, wenns nen intel mac ist
Das ist kein Grund. Die Frage ist, wie das Programm mit dem Betriebssystem kommuniziert. Wenn es das nicht über den Interrupt 80h macht oder die Register anders gesetzt sein müssen, klappt das nicht.
Probieren kann man es trozdem mal.
Vielleicht ist das hier auch hilfreich: http://www.int80h.org/bsdasm/#system-calls
Du musst halt mal in der Dokumentation zu MacOS nachsehen.
-
das was auf der seite steht ist aber für FreeBSD. Hat niemand ein Beispiel Hello World Programm für Mac OS 10.5.2 auf i386 Architektur ? Oder kann kurz eins schreiben?
-
LittleGamer3 schrieb:
das was auf der seite steht ist aber für FreeBSD. Hat niemand ein Beispiel Hello World Programm für Mac OS 10.5.2 auf i386 Architektur ? Oder kann kurz eins schreiben?
MacOS ist BSD ziemlich ähnlich. Such doch mal auf http://developer.apple.com da gibts bestimmt was.
Andernfalls, könntest du auf für die Ausgabe auch auf die C-Biliothek zugreifen.
Kannst mal ein Hello-World in C schreiben und den gcc so aufrufen:
gcc -S hello.c
Dann bekommst du den Assembler Code, den der gcc erzeugen würde. Der nutzt aber die C-Biliothek.
-
auf developer.apple.com gibts was zu assembler, da ich noch anfänger bin hab ich das allerdings nicht so verstanden und da ist auch kein Beispiel oder so.
Das andre versuch ich jetzt mal.
LittleGamer3
-
So ich hab das jetzt mal versucht. Dabei ist folgendes herausgekomemn:
Also mein C Code war:#include <stdio.h> int main (void) { printf("Hallo Welt\n"); return 0; }
dann hab ich mit dem obenstehen command kompiliert und dabei ist eine Datei namens hallo.s entstanden. Mac kennzeichnet die als "Assembler Source File".
Sie sieht so aus:.cstring LC0: .ascii "Hallo Welt\0" .text .globl _main _main: pushl %ebp movl %esp, %ebp pushl %ebx subl $20, %esp call L3 "L00000000001$pb": L3: popl %ebx leal LC0-"L00000000001$pb"(%ebx), %eax movl %eax, (%esp) call L_puts$stub movl $0, %eax addl $20, %esp popl %ebx leave ret .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5 L_puts$stub: .indirect_symbol _puts hlt ; hlt ; hlt ; hlt ; hlt .subsections_via_symbols
Der Code ist aber irgendwie zu lang. Wie kann man das jetzt machen, dass man reines Assembler hat, also ohne cstring?
Danke LittleGamer3
-
LittleGamer3 schrieb:
Der Code ist aber irgendwie zu lang. Wie kann man das jetzt machen, dass man reines Assembler hat, also ohne cstring?
Was willst du denn? Das ist doch "reines" Assembler, oder siehtst du da irgendwas von C. Das einzige, was du tust, ist eine Betriebsystem-Funktion aufrufen. Die Funktion liegt in der C-Biliothek.
Wenn du ohne C-Biliothek auskommen willst, musst du dir den Quelltext der C-Biliothek runter laden und gucken, wie die puts geschrieben ist und in Assembler umschreiben.
-
ProgChild meinte voher denke ich mal, dass der Mac OS - Kernel auf dem FreeBSDkernel basiert, und DAHER die Systemaufrufe gleich sein könnten.
-
Wenn ich mal wieder ein bissl frei Zeit hab versuch ich das mal.
LittleGamer3