theme - xcode night mode




Asamblea x86 en una Mac (6)

Además, en los Intel Macs, ¿puedo usar el asm genérico x86? o hay un conjunto de instrucciones modificado? Cualquier información sobre el montaje de la publicación Intel Mac ayuda.

Es el mismo conjunto de instrucciones; son las mismas fichas.

¿Alguien sabe de alguna buena herramienta (estoy buscando IDE) para escribir el ensamblaje en la Mac? Xcode es un poco engorroso para mí.

Además, en los Intel Macs, ¿puedo usar el asm genérico x86? ¿O hay un conjunto de instrucciones modificado? Cualquier información sobre la publicación de Intel.

Además, sé que en Windows, asm puede ejecutarse en un entorno emulado creado por el sistema operativo para permitir que el código crea que se ejecuta en su propia máquina dedicada. ¿OS X proporciona lo mismo?


Como se dijo anteriormente, no use syscall. Sin embargo, puede usar las llamadas estándar de la biblioteca C, pero tenga en cuenta que la pila DEBE estar alineada con 16 bytes según la llamada de función IA32 de Apple ABI .

Si no alinea la pila, su programa se bloqueará en __dyld_misaligned_stack_error cuando haga una llamada a cualquiera de las bibliotecas o marcos.

El siguiente fragmento se ensambla y se ejecuta en mi sistema:

; File: hello.asm
; Build: nasm -f macho hello.asm && gcc -o hello hello.o

SECTION .rodata
hello.msg db 'Hello, World!',0x0a,0x00

SECTION .text

extern _printf ; could also use _puts...
GLOBAL _main

; aligns esp to 16 bytes in preparation for calling a C library function
; arg is number of bytes to pad for function arguments, this should be a multiple of 16
; unless you are using push/pop to load args
%macro clib_prolog 1
    mov ebx, esp        ; remember current esp
    and esp, 0xFFFFFFF0 ; align to next 16 byte boundary (could be zero offset!)
    sub esp, 12         ; skip ahead 12 so we can store original esp
    push ebx            ; store esp (16 bytes aligned again)
    sub esp, %1         ; pad for arguments (make conditional?)
%endmacro

; arg must match most recent call to clib_prolog
%macro clib_epilog 1
    add esp, %1         ; remove arg padding
    pop ebx             ; get original esp
    mov esp, ebx        ; restore
%endmacro

_main:
    ; set up stack frame
    push ebp
    mov ebp, esp
    push ebx

    clib_prolog 16
    mov dword [esp], hello.msg
    call _printf
    ; can make more clib calls here...
    clib_epilog 16

    ; tear down stack frame
    pop ebx
    mov esp, ebp
    pop ebp
    mov eax, 0          ; set return code
    ret

Las funciones disponibles para usar dependen de su procesador. Apple usa las mismas cosas de Intel que todos los demás. Así que sí, genérico x86 debería estar bien (suponiendo que no está en un PPC: D).

En cuanto a las herramientas, creo que su mejor opción es un buen editor de texto que 'entienda' el ensamblaje.


No olvide que, a diferencia de Windows, todo sistema basado en Unix necesita tener el origen antes de su destino a diferencia de Windows

En Windows es:

mov $ fuente,% destino

pero en la Mac es al revés.



Recientemente, quería aprender a compilar Intel x86 en Mac OS X:

Para Nasm:

-o hello.tmp - outfile
-f macho - specify format
Linux - elf or elf64
Mac OSX - macho

Para ld:

-arch i386 - specify architecture (32 bit assembly)
-macosx_version_min 10.6 (Mac OSX - complains about default specification)
-no_pie (Mac OSX - removes ld warning)
-e main - specify main symbol name (Mac OSX - default is start)
-o hello.o - outfile

Para Shell:

./hello.o - execution

Un trazador de líneas:

nasm -o hello.tmp -f macho hello.s && ld -arch i386 -macosx_version_min 10.6 -no_pie -e _main -o hello.o hello.tmp && ./hello.o

¡Déjeme saber si esto ayuda!

Escribí cómo hacerlo en mi blog aquí:

http://blog.burrowsapps.com/2013/07/how-to-compile-helloworld-in-intel-x86.html

Para una explicación más detallada, expliqué en mi Github aquí:

https://github.com/jaredsburrows/Assembly





assembly