GNU/Linux >> Znalost Linux >  >> Linux

Kompilace 32bitového Assembleru na 64bitovém ubuntu

První změna _printf do printf a _start symbol na main a poté použijte gcc propojit objektový soubor, který jej automaticky propojí s libc , musíte to udělat, protože AFAIK nemůžete propojit s knihovnou libc bez main . Také byste měli při sestavování používat elf32 ne elf64, protože kód má 32bitové instrukce:

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

A stavět pomocí:

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

Upravit:

Protože nyní kompilujete 32bitový kód na 64bitovém systému, budete muset nainstalovat 32bitovou verzi knihoven

apt-get install ia32-libs 

Na Ubuntu 12.10 musíte nejprve nainstalovat vývojové balíčky

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

pro

gcc -m32 vaja4.o -o vaja4

do práce.


Pochybuji, že chyba, kterou vidíte, je způsobena 32/64bitovým problémem. Chyba, kterou vidíte, tj.

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

vám jasně říká, že symbol _printf není definován, což znamená, že knihovna pro funkci printf není propojena.

váš krok propojení, tj.

ld vaja4.o -o vaja4

nezahrnuje žádné knihovny. Musíte propojit svůj program s knihovnou, která může poskytnout definici funkce printf. Věřím, že by si měl knihovnu vybrat sám, aniž by vás obtěžoval těmito zprávami, ale protože není schopen najít vhodnou knihovnu C pro tuto funkci, domnívám se, že požadované knihovny nemáte, tj. chybí buď 32bitová nebo 64bitová knihovna.

Každopádně vyzkoušejte prosím následující sekvenci příkazů pro sestavení a propojení vašeho programu:

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

Linux
  1. Jak nainstalovat Libncurses.so.5 v Ubuntu 20.04?

  2. Instalace Chrome na Ubuntu 12.04 se nezdařila?

  3. Mohu spustit 64bitové ubuntu na svém počítači (>10 let staré)

  1. rTorrent – ​​příkazový řádek Bit Torrent klient v Ubuntu Linux

  2. Jak mohu nainstalovat Mongodb na 32bitové Ubuntu?

  3. Jak upgradovat Ubuntu 20.04 na Ubuntu 21.04

  1. Příkaz Bash printf

  2. Jak nainstalovat Angular na Ubuntu 20.04 LTS

  3. Kompilace vašeho prvního Qt programu v Ubuntu