info sur code asm depuis gcc -S
Salut à tous.
main.c:
Code:
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:
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:
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 |