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


Anmelden zum Antworten