GNU/Linux >> Tutoriels Linux >  >> Linux

Compilation de l'assembleur 32 bits sur Ubuntu 64 bits

Première modification _printf à printf et le _start symbole en main , puis utilisez gcc pour lier le fichier objet, qui le liera automatiquement à libc , vous devez le faire car AFAIK vous ne pouvez pas créer de lien vers libc sans un main . Aussi, vous devez utiliser elf32 et non elf64 lors de l'assemblage car le code a des instructions 32 bits :

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

Et construisez avec :

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

Modifier :

Puisque vous compilez maintenant du code 32 bits sur un système 64 bits, vous devrez installer la version 32 bits des bibliothèques

apt-get install ia32-libs 

Sur Ubuntu 12.10, vous devez d'abord installer les packages de développement

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

pour

gcc -m32 vaja4.o -o vaja4

travailler.


Je doute que l'erreur que vous voyez soit due à un problème 32/64 bits. L'erreur que vous voyez c'est-à-dire

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

vous indique clairement que le symbole _printf n'est pas défini, ce qui signifie que la bibliothèque de la fonction printf n'est pas liée.

votre étape de liaison, c'est-à-dire

ld vaja4.o -o vaja4

n'inclut aucune bibliothèque. Vous devez lier votre programme à une bibliothèque qui peut fournir la définition de la fonction printf. Je pense que ld devrait choisir la bibliothèque elle-même sans vous déranger avec ces messages, mais comme il n'est pas en mesure de trouver une bibliothèque C appropriée pour cette fonction, je suppose que vous n'avez pas les bibliothèques requises, c'est-à-dire qu'il manque une bibliothèque 32 bits ou 64.

Quoi qu'il en soit, veuillez essayer la séquence de commandes suivante pour assembler et lier votre programme :

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

Linux
  1. Comment installer Libncurses.so.5 dans Ubuntu 20.04 ?

  2. L'installation de Chrome a échoué sur Ubuntu 12.04 ?

  3. Comment puis-je installer Mongodb sur Ubuntu 32 bits ??

  4. Comment mettre à niveau Ubuntu 20.04 vers Ubuntu 21.04

  5. Puis-je exécuter Ubuntu 64 bits sur mon PC (> 10 ans)

Installer Nginx sur Ubuntu 18.04

Installer Redis sur Ubuntu

Changer le fuseau horaire dans Ubuntu 18.04

Installer Jenkins sur Ubuntu 18.04

Installer Elasticsearch sur Ubuntu 18.04

Installer MongoDB sur Ubuntu 18.04