Dove posso trovare gli strumenti per l'apprendimento dell'assemblatore su OS X? [chiuso]

StackOverflow https://stackoverflow.com/questions/137523

  •  02-07-2019
  •  | 
  •  

Domanda

Mi piacerebbe imparare l'assemblatore. Tuttavia, ci sono pochissime risorse per fare assemblatore con OS X.

C'è qualcuno là fuori che ha programmato in assembly su un Mac? Dove hai imparato?

E c'è qualche motivo per cui non dovrei fare il montaggio? Rischio (significativamente) di bloccare irreparabilmente il mio computer?

È stato utile?

Soluzione

Se stai usando un Mac PowerPC, guarda in gcc inline assembler. Altrimenti, guarda nel nasm. Non posso fornire riferimenti decenti a PPC ASM (sono pochi e lontani tra loro), ma suggerisco le seguenti cose per imparare x86 asm:

Inoltre, se non sei in modalità kernel, non c'è alcuna possibilità di rovinare qualcosa, davvero, e anche se sei in modalità kernel è difficile distruggere davvero qualcosa.

Modifica: Inoltre, ottieni gcc e simili da XCode non da Macports o somesuch. Sei in un mondo di file Mach-O non validi se non lo fai. Non è divertente diagnosticare problemi di formato di file quando hai appena iniziato a fare hacking.

Altri suggerimenti

Il linguaggio dell'assemblatore è determinato dalla piattaforma hardware, non dal sistema operativo. Dato che OS X funziona su piattaforma Intel ed è a 64 bit, dovresti cercare informazioni sull'assemblatore x64 (chiamato anche AMD64). Consulta l'articolo di Wikipedia ( http://en.wikipedia.org/wiki/X86-64) per molti collegamenti alla documentazione relativa a x64.

Inoltre, la documentazione degli strumenti di OS X potrebbe contenere molte informazioni sull'assemblatore x64. In particolare, Netwide Assembler (NASM - http://developer.apple.com /documentation/DeveloperTools/nasm/nasmdoc0.html ) potrebbe avere una documentazione su come creare applicazioni OS X usando assembler.

Per iniziare l'apprendimento dell'assembly, potresti voler iniziare con semplici programmi C e chiedere a GCC di generare il codice assembler per esso usando l'opzione -S:

gcc -S hello.c -o hello.asm

Sarai quindi in grado di capire come chiamare funzioni, passare argomenti, ecc.

Nasm / yasm sono la soluzione migliore; La sintassi di gcc inline è piuttosto paralizzante e può essere molto dolorosa da usare a volte, inoltre ci sono letteralmente alcune cose che non può fare. La sintassi macro di Nasm è anche molto più utile, una manna dal cielo in un linguaggio come assembly che non ha funzionalità di template incorporate.

XCode (es. GCC) offre un ottimo supporto per la scrittura di assemblatore. È una cosa divertente da imparare (anche se è improbabile che ne abbia molto bisogno), e il peggio che puoi fare è mandare in crash il programma che stai scrivendo, come in C. Solo Google per 'gcc inline asm x86 tutorial' e tu dovrebbe trovare molti punti di partenza. Non preoccuparti che alcuni sembreranno specifici di Linux, generalmente funzioneranno altrettanto bene in XCode.

(modifica) ... supponendo che tu abbia un Mac Intel ovviamente; in caso contrario, sostituire "x86" con "ppc".

qui

Ho programmato l'assemblaggio su un Mac. Era un assemblatore Motorola 680x0 che utilizzava MPW. Ho toccato l'assemblatore PowerPC alcune volte in CodeWarrior e ProjectBuilder. Ora ProjectBuilder si chiama XCode e c'è Intel. L'assemblatore è uno dei tanti strumenti all'interno di XCode.

Originariamente ho imparato l'assemblatore su Apple II: il monitor del linguaggio macchina 6502 incorporato nella ROM, il mini-assemblatore Sweet16 e altri. Successivamente, ho usato l'assemblatore Intel 80186 per accelerare i bit lenti di codice C e ho lavorato per un corso di un giorno sull'assemblatore Intel 80186 in un'università. Successivamente, ho dovuto mantenere un assemblaggio 680x0 per Mac. È stato tanto tempo fa.

Non credo che ci sia alcun motivo per non fare il montaggio. L'apprendimento è fantastico. Scopri tutto quello che puoi. Passa a un debugger di livello abbastanza basso e osserva il codice disassemblato.

Il mio consiglio è:

  

Non aver paura.

Non c'è motivo per cui non dovresti; non c'è niente che tu possa fare in un linguaggio assembly che non puoi fare in un linguaggio di livello superiore come C.

Per quanto riguarda gli strumenti, potresti voler installare MacPorts e ottenere l'assemblatore GNU. Potrebbe essere il modo più semplice o meno, ma è gratuito e probabilmente puoi trovare la documentazione tutorial per scrivere programmi Unix nell'assemblatore GNU da qualche parte sulla rete.

Ci sono due tre cose che devi sapere per scrivere il linguaggio assembly in un sistema con un sistema operativo (al contrario dell'assembly 'bare metal' che è un mondo a parte):

  1. Come funziona il set di istruzioni - un sacco di risorse per Intel X86 se si dispone di un Mac Intel, ancora ragionevole impostato per PPC ad esempio Interni di Mac OS X .

  2. Come assemblare collega i tuoi programmi - se hai gli strumenti per sviluppatori installati hai GCC e strumenti associati

  3. Come parlare con il sistema operativo: ecco dove l'assembly Mac è un lotto meno ben documentato di Windows o Linux. Potrebbe essere necessario scrivere programmi C equivalenti e usare 'gcc -S' per vedere quali convenzioni di ripristino di chiamata / stack sono appropriate. Dipende da cosa vuoi fare, ma al minimo hai bisogno di chiamate di sistema OS per IO e allocazione della memoria.

Un buon punto di partenza è qui .

Se hai Strumenti per sviluppatori installato, puoi semplicemente aprire Terminale e digitare come ( GNU Assembler - parte di Binutils ).

Per PPC prova Lightsoft

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top