Pregunta

¿Alguien sabe de algún buen herramientas (estoy buscando IDEs) para escribir la asamblea en el Mac.Xcode es un poco incómodo para mí.

También, en los Macs Intel, puedo utilizar el genérico asm x86?O es que hay una modificación del conjunto de instrucciones?Cualquier información acerca de los post de Intel.

También:Sé que en windows, asm se puede ejecutar en un emulador de medio ambiente creado por el sistema operativo para permitir que el código de pensar es que se ejecuta en su propia máquina dedicada.¿OS X proporcionar la misma cosa?

¿Fue útil?

Solución

Después de instalar cualquier versión de Xcode orientación de equipos Mac basados en Intel, usted debería ser capaz de escribir código de ensamblado.Xcode es un conjunto de herramientas, de las cuales sólo una es la IDE, así que usted no tiene que usarlo si no quieres.(Dicho esto, si hay cosas específicas que usted encuentre torpe, por favor envíe un reporte en Apple bug reporter - cada error va a la ingeniería.) Además, la instalación de Xcode va a instalar el Netwide Assembler (NASM) y el GNU Assembler (GAS);que te permitirá utilizar cualquier asamblea de la sintaxis que se sienten más cómodos.

Usted también querrá echar un vistazo a la Compilador & Depuración De Guías, debido a que esos documentos las convenciones de llamada utilizadas para las distintas arquitecturas que Mac OS X se ejecuta en, así como el formato binario y el cargador de trabajo.IA-32 (x86-32), llamando a los convenios, en particular, pueden ser ligeramente diferentes de lo que estamos acostumbrados.

Otra cosa a tener en cuenta es que el sistema de llamada de la interfaz de Mac OS X es diferente de lo que podría ser utilizado en DOS/Windows, Linux o BSD sabores.Sistema de llamadas no se considera una API estable en Mac OS X;en su lugar, usted siempre ir a través de libSystem.Que se asegurará de que usted está escribiendo código que se portátil de una versión del sistema operativo para el siguiente.

Por último, tenga en cuenta que Mac OS X se ejecuta a través de una muy amplia gama de hardware de todo tipo, desde los de 32 bits Core Solo a través de la gama alta de procesadores quad-core Xeon.Mediante la codificación en la asamblea no puede ser la optimización tanto como piensas;lo óptimo en una máquina, puede ser pessimal en otro.Apple regularmente las medidas de sus compiladores y las melodías de su salida con el "-Os" optimización de la bandera decente a través de su línea, y existe un gran vector/matriz de procesamiento de bibliotecas que usted puede utilizar para obtener un alto rendimiento con una mano-afinado de la CPU implementaciones específicas.

Ir a la asamblea para su diversión es grande.Ir a la asamblea para que la velocidad no es para los débiles de corazón en estos días.

Otros consejos

Como se dijo antes, no utilizar syscall.Usted puede utilizar el estándar de C biblioteca de llamadas, pero ser conscientes de que la pila DEBE ser de 16 bytes alineado por Apple IA32 llamada a la función ABI.

Si no alinee la pila, el programa se bloqueará en __dyld_misaligned_stack_error cuando se realiza una llamada en cualquiera de las bibliotecas o de los marcos.

El siguiente fragmento de código se compila y se ejecuta en el 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

Para un buen paso-por-paso x86 Mac específica de la introducción de ver http://peter.michaux.ca/articles/assembly-hello-world-for-os-x.Los otros enlaces que he tratado de tener algún no-Mac trampas.

Recientemente he querido 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 el 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 El Shell:

./hello.o - execution

One-liner:

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éjame 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 más detallada explicación, expliqué en mi Github aquí:

https://github.com/jaredsburrows/Assembly

Ejecución de Código ensamblador en Mac es sólo 3 pasos de distancia de usted.Se puede hacer uso de XCODE, pero mejor es utilizar NASM Herramienta de Línea de Comandos.Para Mi Facilidad ya he instalado Xcode, si usted tiene Xcode instalado bien.

Pero se puede hacer sin XCode así.

Simplemente Sigue:

  1. Primero Instalar NASM el uso de Homebrew brew install nasm
  2. convertir .asm archivo en el Archivo Obj usando este comando nasm -f macho64 myFile.asm
  3. Ejecutar el Archivo Obj ver la Salida usando el comando ld -macosx_version_min 10.7.0 -lSystem -o OutPutFile myFile.o && ./64

Simple Archivo de Texto denominado miarchivo.asm se escribe a continuación para su conveniencia.

global start
section .text

start:
    mov     rax, 0x2000004 ; write
    mov     rdi, 1 ; stdout
    mov     rsi, msg
    mov     rdx, msg.len
    syscall

    mov     rax, 0x2000001 ; exit
    mov     rdi, 0
    syscall

section .data

msg:    db      "Assalam O Alaikum Dear", 10
.len:   equ     $ - msg

También, en los Macs Intel, puedo utilizar el genérico asm x86?o es que hay una modificación del conjunto de instrucciones?Cualquier información acerca de los post de Mac Intel asamblea de la ayuda.

Es el mismo conjunto de instrucciones;es el mismo chips.

Las características disponibles para su uso depende de tu procesador.Apple utiliza el mismo Intel cosas como todos los demás.Así que sí, x86 genérico debe estar bien (suponiendo que no estás en un PPC :D).

Tan lejos como herramientas de ir, creo que tu mejor apuesta es un buen editor de texto que "entiende" de la asamblea.

Olvídate de encontrar un IDE para escribir/ejecutar/compilación de ensamblador en Mac.Pero recuerde que una mac es UNIX.Ver http://asm.sourceforge.net/articles/linasm.html.Un decente guía (aunque corto) a la ejecución de ensamblador a través de GCC en Linux.Puede imitar este.Macs uso de los chips de Intel por lo que desea buscar en la sintaxis de Intel.

No olvides que a diferencia de Windows, todos basados en Unix es necesario que el sistema tenga la fuente antes de destino, a diferencia de Windows

En Windows es:

mov $fuente , %destino

pero en el Mac es al revés.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top