GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kompilieren von 32-Bit-Assembler auf 64-Bit-Ubuntu

Ändern Sie zuerst _printf bis printf und die _start Symbol zu main , dann verwenden Sie gcc um die Objektdatei zu verknüpfen, wodurch sie automatisch mit libc verknüpft wird , Sie müssen das tun, weil Sie AFAIK ohne main nicht auf libc verlinken können . Außerdem sollten Sie beim Assemblieren elf32 und nicht elf64 verwenden, da der Code 32-Bit-Anweisungen enthält:

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

Und bauen Sie mit:

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

Bearbeiten:

Da Sie jetzt 32-Bit-Code auf einem 64-Bit-System kompilieren, müssen Sie die 32-Bit-Version der Bibliotheken installieren

apt-get install ia32-libs 

Unter Ubuntu 12.10 müssen Sie zuerst Entwicklungspakete installieren

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

für

gcc -m32 vaja4.o -o vaja4

zu arbeiten.


Ich bezweifle, dass der angezeigte Fehler auf ein 32/64-Bit-Problem zurückzuführen ist. Der Fehler, den Sie sehen, dh

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

sagt Ihnen eindeutig, dass das Symbol _printf undefiniert ist, was bedeutet, dass die Bibliothek für die printf-Funktion nicht verknüpft wird.

Ihr Verknüpfungsschritt, d.h.

ld vaja4.o -o vaja4

enthält keine Bibliotheken. Sie müssen Ihr Programm mit einer Bibliothek verknüpfen, die die Definition der printf-Funktion bereitstellen kann. Ich glaube, ld sollte die Bibliothek selbst auswählen, ohne Sie mit diesen Meldungen zu belästigen, aber da es keine geeignete C-Bibliothek für diese Funktion finden kann, haben Sie vermutlich nicht die erforderlichen Bibliotheken, dh entweder die 32-Bit- oder die 64-Bit-Bibliothek fehlt.

Wie auch immer, versuchen Sie bitte die folgende Befehlsfolge, um Ihr Programm zu assemblieren und zu linken:

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

Linux
  1. Wie installiere ich Libncurses.so.5 in Ubuntu 20.04?

  2. Chrome-Installation unter Ubuntu 12.04 fehlgeschlagen?

  3. Wie kann ich Mongodb auf 32-Bit-Ubuntu installieren?

  4. So aktualisieren Sie Ubuntu 20.04 auf Ubuntu 21.04

  5. Kann ich 64-Bit-Ubuntu auf meinem PC ausführen (>10 Jahre alt)

Installieren Sie Nginx auf Ubuntu 18.04

Installieren Sie Redis auf Ubuntu

Zeitzone in Ubuntu 18.04 ändern

Installieren Sie Jenkins auf Ubuntu 18.04

Installieren Sie Elasticsearch auf Ubuntu 18.04

Installieren Sie MongoDB auf Ubuntu 18.04