Wie kompiliere ich das von GCC generierte asm?

 C Programming >> C-Programmierung >  >> Tags >> GCC
Wie kompiliere ich das von GCC generierte asm?


Ich spiele mit Asm-Code herum und etwas stört mich.


Ich kompiliere das:


#include <stdio.h>
int main(int argc, char** argv){
printf("Hello World\n");
return 0;
}

mit gcc file.c -S -o file.S dies erzeugt ein nettes kleines Stück ASM-Code:


    .cstring
LC0:
.ascii "Hello World\0"
.text
.globl _main
_main:
LFB3:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
subq $16, %rsp
LCFI2:
movl %edi, -4(%rbp)
movq %rsi, -16(%rbp)
leaq LC0(%rip), %rdi
call _puts
movl $0, %eax
leave
ret
LFE3:
.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
EH_frame1:
.set L$set$0,LECIE1-LSCIE1
.long L$set$0
LSCIE1:
.long 0x0
.byte 0x1
.ascii "zR\0"
.byte 0x1
.byte 0x78
.byte 0x10
.byte 0x1
.byte 0x10
.byte 0xc
.byte 0x7
.byte 0x8
.byte 0x90
.byte 0x1
.align 3
LECIE1:
.globl _main.eh
_main.eh:
LSFDE1:
.set L$set$1,LEFDE1-LASFDE1
.long L$set$1
LASFDE1:
.long LASFDE1-EH_frame1
.quad LFB3-.
.set L$set$2,LFE3-LFB3
.quad L$set$2
.byte 0x0
.byte 0x4
.set L$set$3,LCFI0-LFB3
.long L$set$3
.byte 0xe
.byte 0x10
.byte 0x86
.byte 0x2
.byte 0x4
.set L$set$4,LCFI1-LCFI0
.long L$set$4
.byte 0xd
.byte 0x6
.align 3
LEFDE1:
.subsections_via_symbols

Mein nächstes Problem ist wirklich, wie kompiliere ich diese Ausgabe und kann ich GCC dazu bringen, dies für mich zu tun?


Antworten:


Ja, Sie können gcc verwenden, um Ihren asm-Code zu kompilieren. Verwenden Sie -c für die Kompilierung wie folgt:


gcc -c file.S -o file.o

Dies ergibt eine Objektcodedatei mit dem Namen file.o.
Um den Linker aufzurufen, führen Sie nach dem obigen Befehl Folgendes aus:


gcc file.o -o file