Ho cercato di familiarizzare con assembly su mac, e da quello che posso dire, la documentazione è davvero scarsa, e la maggior parte dei libri sull'argomento sono per windows o linux. Ho pensato di essere in grado di tradurre da Linux a Mac abbastanza facilmente, ma questo (linux)Qual è la differenza tra assembly su mac e assembly su linux?
.file "simple.c"
.text
.globl simple
.type simple, @function
simple:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 12(%ebp), %eax
addl (%edx), %eax
movl %eax, (%edx)
popl %ebp
ret
.size simple, .-simple
.ident "GCC: (Ubuntu 4.3.2-1ubuntu11) 4.3.2"
.section .note.GNU-stack,"",@progbits
sembra abbastanza diverso da questo (Mac)
.section __TEXT,__text,regular,pure_instructions
.globl _simple
.align 4, 0x90
_simple: ## @simple
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp4:
.cfi_def_cfa_register %rbp
addl (%rdi), %esi
movl %esi, (%rdi)
movl %esi, %eax
popq %rbp
ret
.cfi_endproc
.subsections_via_symbols
Il "normale" (per mancanza di una parola migliore) istruzioni e registri come pushq %rbp
non ti preoccupare. Ma quelli "bizzarri" come .cfi_startproc
e Ltmp2:
che si trovano nel bel mezzo delle istruzioni della macchina non hanno alcun senso.
Non ho idea di dove andare per scoprire cosa sono e cosa significano. Sto per strapparmi i capelli mentre cerco di trovare una buona risorsa per i principianti per mesi. Eventuali suggerimenti?
Il formato e il significato delle direttive dipenderanno dal particolare sapore dell'assembler che si sta utilizzando. L'interfaccia con il sistema operativo sarà similmente aromatizzata. –
@MikeW Cosa intendi per "sapore"? Dove posso trovare ulteriori informazioni a riguardo? Sto usando GCC quindi presumo sia l'assemblatore GNU. –
Le differenze sono principalmente specifiche del formato eseguibile di destinazione o sono informazioni sui simboli di debug. – zneak