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 24/06/2008, à 18:06

®om

assembler?

Salut,

Pour voir un peu comment fonctionne as, je souhaite assembler un programme (source asm → binaire exécutable).

J'ai créé un fichier test.c, dont voici le source :

int main() {
    return 0;
}

Je le compile avec gcc -S test.c, ce qui me donne test.s :

	.file	"test.c"
	.text
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	movl	$0, %eax
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
	.ident	"GCC: (GNU) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)"
	.section	.note.GNU-stack,"",@progbits

Je tente de l'assembler avec as test.s, ça me génère un a.out, sur lequel je fais un chmod +x.
Mais quand j'essaie de l'exécuter :

$ ./a.out 
bash: ./a.out : impossible d'exécuter le fichier binaire

Comment se fait-ce?

Merci de votre aide.

Hors ligne

#2 Le 24/06/2008, à 18:14

aeacides

Re : assembler?

tiens un peu de doc:

http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html

Sinon compile selon cette syntaxe:

as -o hello.o hello.S

ref: http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html#S-QUICK

ensuite pour créer un executable avec ton propre output,

ld -s -o hello hello.o

smile

Dernière modification par aeacides (Le 24/06/2008, à 18:15)


http://www.q-be.ca

Hors ligne

#3 Le 24/06/2008, à 18:19

®om

Re : assembler?

rom@rom-laptop:~/test$ as -o test.o test.s
rom@rom-laptop:~/test$ ld -s -o test test.o
ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074
rom@rom-laptop:~/test$ ./test
Erreur de segmentation

sad

Hors ligne

#4 Le 24/06/2008, à 18:37

aeacides

Re : assembler?

Qu'est-ce que ces commandes te renvoie?

objdump -d test
objdump -r test

http://www.q-be.ca

Hors ligne

#5 Le 24/06/2008, à 18:43

®om

Re : assembler?

rom@rom-laptop:~/test$ objdump -d test

test:     file format elf32-i386

Disassembly of section .text:

08048074 <.text>:
 8048074:	8d 4c 24 04          	lea    0x4(%esp),%ecx
 8048078:	83 e4 f0             	and    $0xfffffff0,%esp
 804807b:	ff 71 fc             	pushl  -0x4(%ecx)
 804807e:	55                   	push   %ebp
 804807f:	89 e5                	mov    %esp,%ebp
 8048081:	51                   	push   %ecx
 8048082:	b8 00 00 00 00       	mov    $0x0,%eax
 8048087:	59                   	pop    %ecx
 8048088:	5d                   	pop    %ebp
 8048089:	8d 61 fc             	lea    -0x4(%ecx),%esp
 804808c:	c3                   	ret    
rom@rom-laptop:~/test$ objdump -r test

test:     file format elf32-i386

Merci pour ces commandes, justement ma 2e question concernait la décompilation smile
Quel paramètre faut-il pour qu'il n'écrive que le code asm en sortie, sans les adresses et l'hexa?

Hors ligne

#6 Le 24/06/2008, à 18:53

aeacides

Re : assembler?

Désolé je connais pas trop ça, mais je crois que cette section pourrait répondre à ta question. Je vais continuer de regarder, des fois que je trouverais ce que tu cherches ...

http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html#P-GCC


http://www.q-be.ca

Hors ligne

#7 Le 24/06/2008, à 19:01

aeacides

Re : assembler?

tiens je viens de dénicher ça:

gcc -c -O2 -Wa,-al hello.c

Ce 2e exemple avec l'option h rajouter à -al va te sortir un output un peu plus compréhensible.

gcc -c -g -O2 -Wa,-alh hello.c

Ref: http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/devtools/s1-assembler-listings.html


http://www.q-be.ca

Hors ligne