说明gcc编译工具集中各软件的用途,了解ELF文件格式

目录

Gcc

一.gcc编译工具

二.gcc编译过程

ELF文件格式

一.ELF 文件的段

二.反汇编ELF

Gcc

一.gcc编译工具

(1) addr2line:用 来将程序 地址转 换成其所 对应的程 序源文 件及所对 应的代 码
行,也可以得到所对应的函数。该工具将帮助调试器在调试的过程中定位对
应的源代码位置。
(2) as:主要用于汇编,有关汇编的详细介绍请参见后文。
(3) ld:主要用于链接,有关链接的详细介绍请参见后文。
(4) ar:主要用于创建静态库。
(5) ldd:可以用于查看一个可执行程序依赖的共享库。
(6) objcopy:将一种对象文件翻译成另一种格式,譬如将.bin 转换成.elf、或
者将.elf 转换成.bin 等。
(7) objdump:主要的作用是反汇编。有关反汇编的详细介绍,请参见后文。
(8) readelf:显示有关 ELF 文件的信息,请参见后文了解更多信息。
(9) size:列出可执行文件每个部分的尺寸和总尺寸,代码段、数据段、总大小
等。

二.gcc编译过程

1.预处理
gcc -E test.c -o test.i 或 gcc -E test.c

将源代码中包含头文件编译进来

2.编译为汇编代码

gcc -S test.i -o test.s

检查代码规范性并翻译成汇编语言

3.汇编

gcc -c test.s -o test.o

将.s文件转换为目标文件

4.连接

gcc test.o -o test

将目标文件转换为可执行文件

ELF文件格式

一.ELF 文件的段

ELF 文件格式如下图所示,位于 ELF Header 和 Section Header Table 之间的都
是段(Section)。一个典型的 ELF 文件包含下面几个段:
.text:已编译程序的指令代码段。
.rodata:ro 代表 read only,即只读数据(譬如常数 const)。
.data:已初始化的 C 程序全局变量和静态局部变量。
.bss:未初始化的 C 程序全局变量和静态局部变量。
.debug:调试符号表,调试器用此段的信息帮助调试。
说明gcc编译工具集中各软件的用途,了解ELF文件格式_第1张图片

 可以使用 readelf -S 查看其各个 section 的信息如下:

说明gcc编译工具集中各软件的用途,了解ELF文件格式_第2张图片

二.反汇编ELF

由于 ELF 文件无法被当做普通文本文件打开,如果希望直接查看一个 ELF 文件包
含的指令和数据,需要使用反汇编的方法。
使用 objdump -D 对其进行反汇编如下:
说明gcc编译工具集中各软件的用途,了解ELF文件格式_第3张图片

 使用 objdump -S 将其反汇编并且将其 C 语言源代码混合显示出来:

说明gcc编译工具集中各软件的用途,了解ELF文件格式_第4张图片

 

你可能感兴趣的:(linux,ubuntu)