了解GCC常用命令与ELF文件

一、GCC常用命令

1、对Hello的基本操作

  • Hello.c代码
#include <stdio.h> //此程序很简单,仅仅打印一个 Hello World 的字符串。 
int main(void) { 
printf("Hello World! \n"); 
return 0; 
}

  • 三条命令
    在这里插入图片描述
    ①预处理
    ②编译,将预处理生成的 hello.i 文件编译生成汇编程序 hello.s
    ③汇编,汇编过程调用对汇编代码进行处理,生成处理器能识别的指令,保存在后缀为.o 的目标文件中。

  • 链接
    1、静态链接
    静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行 文件会比较大
    在这里插入图片描述
    text链接静态库,代码尺寸变得极大

在这里插入图片描述
2、动态链接
动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统 中把相应动态库加载到内存中去。
在这里插入图片描述
链接了许多其他的动态库,主要是linux系统glibc 动态库
在这里插入图片描述

二、ELF文件

链接器链接后生成的最终文件为 ELF 格式可执行文件,一个 ELF 可执行文件通常 被链接为不同的段,常见的段譬如.text、.data、.rodata、.bss 等段

.text:已编译程序的指令代码段。
.rodata:ro 代表 read only,即只读数据(譬如常数 const)。
.data:已初始化的 C 程序全局变量和静态局部变量。
.bss:未初始化的 C 程序全局变量和静态局部变量。
.debug:调试符号表,调试器用此段的信息帮助调试。
在这里插入图片描述
由于 ELF 文件无法被当做普通文本文件打开,如果希望直接查看一个 ELF 文件包 含的指令和数据,需要使用反汇编的方法
在这里插入图片描述
使用 objdump -S 将其反汇编并且将其 C 语言源代码混合显示出来:
在这里插入图片描述

总结

对gcc的一些常用命令更加熟悉,ELF文件也了解的更多

参考文章

gcc命令基本操作

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值