Salut à tous.

main.c:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    printf("Hello world!\n");
    return 0;
}
Si je fais: gcc -S main.c
J'obtiens main.s:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
	.file	"main.c"
	.section	.rodata
.LC0:
	.string	"Hello world!"
	.text
	.globl	main
	.type	main, @function
main:
.LFB2:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	$.LC0, %edi
	call	puts
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE2:
	.size	main, .-main
	.ident	"GCC: (Debian 4.8.2-4) 4.8.2"
	.section	.note.GNU-stack,"",@progbits
- Ce code, c'est juste un code représentatif assembleur ou c'est c'est un vrai code qui peut fonctionner ?
-- Si c'est un vrai code (assembleur), est-il possible d'exécuté ce fichier pour avoir le même résultat de mon code C ?
--- Si oui, avec quel commande ? Et niveau portabilité (de code) on a droit à quoi ?

(Mon but est un peu de voir les équivalents de code, pour voir si je peux exploiter directement (seulement) les codes assembleur obtenu.)




Si je fais via cet commande: gcc -S -fno-asynchronous-unwind-tables main.c
J'obtiens un code plus simplifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	.file	"main.c"
	.section	.rodata
.LC0:
	.string	"Hello world!"
	.text
	.globl	main
	.type	main, @function
main:
	pushq	%rbp
	movq	%rsp, %rbp
	movl	$.LC0, %edi
	call	puts
	movl	$0, %eax
	popq	%rbp
	ret
	.size	main, .-main
	.ident	"GCC: (Debian 4.8.2-4) 4.8.2"
	.section	.note.GNU-stack,"",@progbits