C语言学习

机器语言 -> 汇编语言 -> C语言(中级语言)->

C语言兼顾底层和顶层

//
gcc编译器,帮我们翻译成二进制文件(机器码)

用objdump -d xxx(目标)可查看二进制文件(16进制方式打印出来)

<_start>是入口
<main>也是入口
//
gcc生成的二进制文件组成(两部分):
    1.    crt1.o(汇编代码) -> <_start>    (系统提供)    crt1是某个依赖库
        _start调用main函数,返回值返回给_start
        <0都被认为是错的
    2.    xxx.o(用户开发)

--------------------------------------------------------
补充:Java是用Java解析器变成C语言,再进行编译处理。

gcc编译过程
1.预处理阶段    #gcc test.c -E -o test.i

    展开头文件/宏替换/去掉注释/条件编译
    如:将#include <stdio.h>等等全部展开

2.编译阶段    #gcc test.i -S -o test.S

    检查语法,生成汇编
    用到编译工具来做的

3.汇编阶段    #gcc test.S -c -o test.o

    汇编代码转换机器码
    .o文件中可以看到ELF?

4.链接阶段    #gcc test.o -o test.elf(拥有合法内存执行的二进制文件)

    链接到一起生成可执行程序(用到链接工具)
    添加各种地址信息到headinfo段中(改变地址)

--------------------------------------------------------
开发平台(ubuntu自带)gcc编译器和各种依赖库
--------------------------------------------------------

代码执行本质:
    1.代码的加载处理
    2.跳到真正的代码入口开始执行
/

编译过程是先在内存中编译,完成后生成新文件并保存到磁盘中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值