GNU/Linux >> Linux Esercitazione >  >> Linux

Compilazione di Assembler a 32 bit su Ubuntu a 64 bit

Prima modifica _printf a printf e il _start simbolo a main , quindi utilizza gcc per collegare il file oggetto, che lo collegherà automaticamente a libc , devi farlo perché AFAIK non puoi collegarti a libc senza un main . Inoltre dovresti usare elf32 non elf64 durante l'assemblaggio perché il codice ha istruzioni a 32 bit:

bits 32
extern printf
global main

section .data
    message db "Hello world!!", 10, 0

section .text

main:
    pushad 
    push dword message
    call printf 
    add esp, 4 
    popad 
    ret

E costruisci con:

nasm -f elf32 vaja4.asm
gcc -m32 vaja4.o -o vaja4
$./test 
$Hello world!!

Modifica:

Poiché ora stai compilando codice a 32 bit su un sistema a 64 bit, dovrai installare la versione a 32 bit delle librerie

apt-get install ia32-libs 

Su Ubuntu 12.10, devi prima installare i pacchetti di sviluppo

sudo apt-get update
sudo apt-get install libc6-dev-i386

per

gcc -m32 vaja4.o -o vaja4

lavorare.


Dubito che l'errore che vedi sia dovuto a un problema a 32/64 bit. L'errore che vedi, ad esempio

vaja4.asm:(.text+0x7): undefined reference to `_printf'

ti dice chiaramente che il simbolo _printf non è definito, il che significa che la libreria per la funzione printf non è collegata.

il tuo passaggio di collegamento, ad esempio

ld vaja4.o -o vaja4

non include alcuna libreria. Devi collegare il tuo programma con una libreria che può fornire la definizione della funzione printf. Credo che ld dovrebbe scegliere la libreria da sola senza disturbarti con questi messaggi, ma poiché non è in grado di trovare una libreria C adatta per questa funzione, immagino che tu non abbia le librerie richieste, ovvero manca la libreria a 32 bit o 64.

Ad ogni modo, prova la seguente sequenza di comandi per assemblare e collegare il tuo programma:

nasm -f elf vaja4.asm
ld -m elf_i386 vaja4.o vaja4
./vaja4

Linux
  1. Come installare Libncurses.so.5 in Ubuntu 20.04?

  2. Installazione di Chrome non riuscita su Ubuntu 12.04?

  3. Come posso installare Mongodb su Ubuntu a 32 bit??

  4. Come aggiornare Ubuntu 20.04 a Ubuntu 21.04

  5. Posso eseguire Ubuntu a 64 bit sul mio PC (> 10 anni)

Installa Nginx su Ubuntu 18.04

Installa Redis su Ubuntu

Cambia fuso orario in Ubuntu 18.04

Installa Jenkins su Ubuntu 18.04

Installa Elasticsearch su Ubuntu 18.04

Installa MongoDB su Ubuntu 18.04