海银财富是国企的吗:gnu二进制工具集

来源:百度文库 编辑:中财网 时间:2024/05/02 07:44:48

    gnu gcc非常依赖一些外部工具。这些外部工具很多都是由gnu的二进制集提供的,它是一组工具的集合,用于产生和控制linux中的二进制应用程序的代码。

 

一、gnu汇编器

       负责把编译好的c代码转换为某一种特定目标处理器上执行的目标代码。gnu as支持不同种类的微处理器。你可以安装其他平台的as,但是无论你安装的是什么配置的汇编器,它在所有平台上的表现都是类似的。

gcc -S hello.c

gcc 将把你的程序的汇编语言版本输出到文件hello.s。

然后使用as汇编器来编译源代码hello.s

as -o hello.o hello.s

这将产生文件hello.o ,包含针对指定汇编语言源文件的可执行目标代码。

 

二、gnu连接器

       linux应用程序存储在elf文件中,如果没有连接,一个可执行程序不会包含足够的额外数据来让linux运行时加载器加载该程序。连接还负责确保任何必须的环境设置代码已经位于每个要在linux目标机上装载并运行的可执行文件的正确位置。就是必须有crt。

       gnu连接器在处理各种目标代码文件并产生需要的输出时遵循一系列被称为连接器脚本的预编译名利。默认在/usr/lib/ldscripts下安装了一些脚本,连接的时候会使用这些脚本。

 

三、gnu objcopy 和 objdump

        他们专门用于控制和将二进制目标代码从一种格式转换为另一种格式,这些工具被称作为objcopy和objdump,许多linux机器使用的底层软件在编译阶段都非常依赖这些工具。调试的时候也需要他们。

        objcopy用于从一个文件拷贝目标代码到另一个文件,并在这个过程中进行转换。这样外面可以在不同的目标代码格式之间进行自动的转换并操纵这个过程中的内容。他们可以任何方式来操作二进制文件。

         objdump可以方便的查看可执行文件的内容。

例子:

objdump -x -d -S hello

要求关闭二进制文件的所有头,驶入反汇编任一可执行段的内容,并将程序的源代码和对应的反汇编代码混合显示。-S 需要在gcc的时候启用调试,并且没有任何gcc优化。