/bin目录下的程序是如何编译成不可读的格式的?

sur*_*gee 7 bash programming compiling

我注意到 /bin 目录中的大多数命令/程序都已编译。我希望自己复制这种不可读的代码格式。有人能告诉我这些程序为什么和/或如何得到这种方式吗?

[绿色邮票奖励]:难道没有 bash 命令可以打印文件中的所有“人类可读”文本?

Sta*_*mer 14

中的命令/程序/bin不是不可读的,但如您所说,它们已编译。这意味着它们最初是用 C(或某种其他编程语言)编写的,并已编译为机器代码(二进制),以便处理器可以执行代码。要做到这一点,只需用 C 编写您需要的程序并运行gcc命令以生成可执行文件。

要打印文件中的任何人类可读文本,请使用strings < /bin/file,


小智 12

介绍

当从 C 或 C++ 源代码编译程序时,诸如gcc(见下文)之类的编译器将该代码转换为 CPU 的本地二进制语言,以便可以执行该程序。因此,人类可读的材料(源代码)变成了非人类可读的格式(机器可读的二进制代码)。

二进制文件和文件系统

如果输入echo $PATH,您将看到系统上所有可执行文件的位置,包括已编译的二进制文件和脚本:

/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

在文件系统层次结构中,关键系统工具如catgetty 分别存在于/bin和 中/sbin,而其他工具如dpkgchroot分别存在于/usr/bin和 中/usr/sbin。如果您通过下载源代码、配置构建和安装来编译程序,默认情况下您的程序应该进入层次结构中的/usr/local/bin其他文件/usr/local

编译器

用于编译二进制文件的最著名的工具之一可能是gcc,它被称为 GNU 编译器集合,更早的时候被称为 GNU C 编译器;Ubuntu 12.04 附带的版本是gcc 4.6.3. 正如官方 GNU手册中所述

GCC is an integrated distribution of compilers for several major programming 
languages. These languages currently include C, C++, Objective-C, Objective-C++, 
Java, Fortran, Ada, and Go.
Run Code Online (Sandbox Code Playgroud)

编译二进制文件

三个命令./configure,makesudo make install(or sudo checkinstall) 通常一起使用以编译程序。

运行./configure,除其他外,检查gcc已安装的版本并准备构建环境。这makefile是运行时产生的最重要的事情之一,./configure因为它在运行时指导构建make。GNU make 手册详细介绍了该过程。总之,规则中的makefile主要目标(创建可执行文件)确定,以便将源代码.c文件制成编译文件(.o文件)以生成目标可执行文件。

资源

两个很棒的资源是这里这里的Ubuntu 编译指南,其中包含一些重要的建议和信息,供编译新手使用。其他资源,例如 GNUgcc手册和make我已经提到的手册。有关 C 和创建一个简单的小 C 程序的更多信息,请参阅Rute 的第 22章和Linux 命令行的第 24 章。