Tôi đang chơi xung quanh với một số mã asm, và một cái gì đó đang làm phiền tôi.Làm cách nào để biên dịch asm do GCC tạo ra?
tôi biên dịch này:
#include <stdio.h>
int main(int argc, char** argv){
printf("Hello World\n");
return 0;
}
với gcc file.c -S -o file.S
này tạo ra một chút mảnh đẹp mã asm:
.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
vấn đề tiếp theo của tôi thực sự, làm thế nào để biên dịch ra đây là, và tôi có thể làm cho GCC làm điều đó cho tôi?
bạn cũng có thể chỉ sử dụng tệp 'gcc.S -o' –
còn về"> as -o hello.o hello.s "? như được chỉ ra bởi https://www3.ntu.edu.sg/home/ehchua/programming/cpp/gcc_make.html. Có vẻ như thứ tự của quá trình là tiền xử lý (* .i-file), biên dịch (*. S-file), lắp ráp (*. O-file) và liên kết (* .exe-file). – user1677716