Salut à tous.
main.c:
Si je fais: gcc -S 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; }
J'obtiens main.s:
- Ce code, c'est juste un code représentatif assembleur ou c'est c'est un vrai code qui peut fonctionner ?
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
-- 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
Partager