Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/09/2020, à 18:34

m.s0

gcc et as pour assembleur

bonjour,

lorsque j’exécute le programme "bonjour tout le monde" compilé avec as, j'ai ce message d'erreur:

as --64 btlm.s
chmod +x a.out
./a.out 
bash: ./a.out : impossible d'exécuter le fichier binaire : Erreur de format pour exec()
file a.out 
a.out: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped

avec gcc, j'ai ce message:

gcc -o btlm btlm.s 
/usr/bin/ld: /tmp/ccAqmp67.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
gcc -fPIE -o btlm btlm.s 
/usr/bin/ld: /tmp/ccVK2DZq.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status

voici le code:

	.data			# directive de création d'une zone de donnée
				# adresse symbolique pointant sur la chaîne:
btlm:
	.string "Bonjour tout le monde!\n"
	.text			# directive de création d'une zone
				# d'instructions
	.globl main		# directive de création d'une étiquette
				# de portée globale
main:				# main est l'adresse de début du programme
	movl	$4,%eax		# sélection de la fonction write du système
	movl	$1,%ebx		# dernier paramètre de write : stdout
	movl	$btlm,%ecx	# premier paramètre de write : l'adresse de
				# la chaîne de caractères à afficher
	movl	$23,%edx	# le nombre de caractères à afficher : 23
	int	$0x80		# appel de l'interruption 128 ­> GNU/Linux
	movl	$1,%eax		# sélection de la fonction exit du système
	xorl	%ebx,%ebx	# mise à zéro du 1er paramètre en utilisant
				# xor, c'est à dire ou exclusif
	int	$0x80		# appel de l'interruption 128 ­> GNU/Linux
ret

quelqu'un a une idée?

Hors ligne

#2 Le 07/09/2020, à 18:56

NicoApi73

Re : gcc et as pour assembleur

Bonsoir

as btlm.s -o btlm.o
ld btlm.o -o btlm
./btlm

Hors ligne

#3 Le 07/09/2020, à 20:47

m.s0

Re : gcc et as pour assembleur

ld btlm.o -o btlm
ld : avertissement : le symbole d'entrée _start est introuvable ; utilise par défaut 0000000000401000

comment dois-je introduire _start?
et pour gcc?
une idée?

Hors ligne

#4 Le 07/09/2020, à 20:49

m.s0

Re : gcc et as pour assembleur

ha, c'est qu'un avertissement!
en fait,ça marche
merci NicoApi73

Hors ligne

#5 Le 07/09/2020, à 21:06

m.s0

Re : gcc et as pour assembleur

	.data			# directive de création d'une zone de donnée
				# adresse symbolique pointant sur la chaîne:
btlm:
	.string "Bonjour tout le monde!\n"
	.text			# directive de création d'une zone
				# d'instructions
	.global _start		# directive de création d'une étiquette
				# de portée globale
_start:				# main est l'adresse de début du programme
	movl	$4,%eax		# sélection de la fonction write du système
	movl	$1,%ebx		# dernier paramètre de write : stdout
	movl	$btlm,%ecx	# premier paramètre de write : l'adresse de
				# la chaîne de caractères à afficher
	movl	$23,%edx	# le nombre de caractères à afficher : 23
	int	$0x80		# appel de l'interruption 128 ­> GNU/Linux
	movl	$1,%eax		# sélection de la fonction exit du système
	xorl	%ebx,%ebx	# mise à zéro du 1er paramètre en utilisant
				# xor, c'est à dire ou exclusif
	int	$0x80		# appel de l'interruption 128 ­> GNU/Linux
ret

Hors ligne

#6 Le 09/09/2020, à 14:48

AMOR19

Re : gcc et as pour assembleur

Salut NicoApi. Je m'excuse si je saute un peu comme ça dans cette discussion mais j'ai besoin de ton aide ici si c'est possible bien évidemment. J'ai vu que t'es intervenu avec succès pour résoudre des problèmes de ce genre. Je te remercie à l'avance et je réitère mes excuses à tout le monde.

Hors ligne