2013-08-25 30 views
9

Sto cercando di conoscere l'assembly con il libro "Programming from the ground up". Il libro copre solo istruzioni a 32 bit. C'è un modo per eseguire i codici di esempio sul sistema Ubuntu a 64 bit? Non riesco a capire le cose sulla pagina man dell'assemblatore GNU ma ho sentito che il flag -m32 dovrebbe farlo. Ma non è un'opzione riconosciuta.Compilazione di un assembly a 32 bit su sistema a 64 bit (Ubuntu)

Come faccio a ottenere gli esempi sul libro per lavorare con facilità?

+0

Puoi dare un riferimento al libro? O mostrare alcuni campioni? –

+1

Il collegamento è ora fornito. Quel primo programma è quello che sto cercando di eseguire. – huggie

+0

Penso che il modo migliore sia installare Ubuntu a 32 bit in VirtualBox. Ci sono altre opzioni (vedi https://help.ubuntu.com/community/32bit_and_64bit), ma questo è veramente difficile. –

risposta

13

Quando il vostro assemblatore e linker sono versioni x86_64, le opzioni per la produzione di i386 (a 32 bit) in uscita sono

as --32 
ld -m elf_i386 

È don' t devi usare as e ld solo perché stai lavorando con codice assembly. gcc può essere utilizzato, e in tal caso si utilizzerà -m32.

gcc -m32 -nostdlib myprog.s -o myprog 
+0

Grande! Grazie per il consiglio. – huggie

2

Dalla pagina man come:

Target i386 options: 
     [--32|--n32|--64] [-n] 
     [-march=CPU[+EXTENSION...]] [-mtune=CPU] 

non sono sicuro se funziona, basta provare --32 o --n32.

(-m32 sembra ge la bandiera gcc corrispondente.)

+0

Il '--n32' nella pagina man sembra essere un errore di battitura per' --x32'. Per il vecchio codice come quello contenuto in questo libro, vuoi '--32'. '--x32' è per codice più recente che usa le caratteristiche x86_64 ma vuole puntatori a 32 bit. Quando usi 'as --32' probabilmente avrai anche' -m elf_i386' per i comandi 'ld'. –

+0

@ WumpusQ.Wumbley Ottimo funziona! Controllerei la tua risposta se ne pubblicassi uno. :) In una nota a margine, è questo il modo consigliato per imparare il montaggio al giorno d'oggi? So che questo libro è un po 'vecchio, ma sembra un buon libro. Qualsiasi risorsa alternativa a 64 bit che sia valida quanto questo libro sarebbe utile. :) – huggie

0

La creazione di un file eseguibile a 32 bit su un 64-bit PC richiede che si "avvertire" il linker che un file a 32 bit elfo è in arrivo:

$ nasm -f elf -g - F pugnala eat.asm

$ ld -o mangiare eat.o -melf_i386

Questo è ciò che la direttiva melf_i386 fa: racconta ld che il file eat.o è un file oggetto linkabile elf32. L'invocazione di NASM è la stessa che useresti su un PC a 32 bit.

Grazie @Jeff Duntemann

Problemi correlati