一个简单的hello汇编语言
朋友们,注意了,写这个小教程
都是为他服务给大家的,希望大家常来我这个地方转一下
?
我用的环境MacOSX 装了xcode?
1. 编辑一个hello.c
?
? ?vi hello.c
?
? ?#include <stdio.h>
? ?int main(int argc,char *argv)
? ?{
? ? printf("\nHello\n");
? ? return 0;
? ?}
? ?保存
2. 在命令行中执行
? ?gcc -S hello.c -o hello.asm -Os
? ?以下是asm内容
?
?
? ? .cstring
LC0:
.ascii "\12Hello\0"
.text
.globl _main
_main:
LFB3:
pushq %rbp
LCFI0:
movq %rsp, %rbp
LCFI1:
leaq LC0(%rip), %rdi
call _puts
xorl %eax, %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
?
? ?继续执行 ? ?
? ?as hello.asm -o hello.o
? ?gcc hello.o -o hello
? ?./hello
3. 朋友们会说,你直接用gcc就可编译了,为什么还用as汇编
? ?这里就是为了看和分析一个hello程序的机器指令过程
?