Compiler un assembleur 32 bits sur ubuntu 64 bits [dupliquer]
Cette question a déjà une réponse ici:
j'ai un programme écrit en langage d'assemblage 32 bits... Je ne peux pas le compiler sur OS 64 bits. Sur notre école, ils sont spécifiques et le programme doit être écrit en version 32 bits. Voici mon programme:
bits 32
extern _printf
global _start
section .data
message db "Hello world!!", 10, 0
section .text
_start:
pushad
push dword message
call _printf
add esp, 4
popad
ret
une idée? J'ai essayé de nombreuses façons de compiler. La sortie d'erreur lors de la compilation:
nasm -f elf64 vaja4.asm
ld vaja4.o -o vaja4
./vaja4
sortie:
vaja4.o: In function `_start':
vaja4.asm:(.text+0x7): undefined reference to `_printf'
3 réponses
Premier changement _printf
printf
et main
, puis utilisez gcc
pour lier le fichier objet, qui le liera automatiquement à libc
,vous devez faire cela car AFAIK vous ne pouvez pas lier à libc sans un main
. En outre, vous devez utiliser elf32 pas elf64 lors de l'assemblage parce que le code a 32 instructions 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 construire avec:
nasm -f elf32 vaja4.asm
gcc -m32 vaja4.o -o vaja4
$./test
$Hello world!!
il y a un joli tutoriel ici:
http://jdefr.swippet.com/2012/03/22/using-libc-with-assembly/
Edit:
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 installer les paquets de développement d'abord
sudo apt-get update
sudo apt-get install libc6-dev-i386
gcc -m32 vaja4.o -o vaja4
au travail.
je doute que l'erreur que vous voyez est à cause de 32/64 bits problème. L'erreur que vous voyez que je.e
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 pour la fonction printf n'est pas liée.
votre étape de liaison-je.e
ld vaja4.o -o vaja4
ne comprend pas les bibliothèques. Vous devez lier votre programme avec une bibliothèque qui peut fournir la définition de la fonction printf. Je crois ld devrait choisir la bibliothèque elle-même, sans vous ennuyer avec ces messages mais parce qu'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 nécessaires I. e soit 32 bits ou 64 Bibliothèque est manquant.
quoi qu'il en soit, plz essayez la séquence suivante de commandes pour assembler et lier votre programme:
nasm -f elf vaja4.asm
ld -m elf_i386 vaja4.o vaja4
./vaja4