在发现几个常用命令(例如read
)实际上是 Bash 内置命令(并且在提示符下运行它们时,我实际上正在运行一个两行的 shell 脚本,它只是转发到内置命令),我想看看是否相同对于true
和是真的false
。
好吧,它们绝对是二进制文件。
sh-4.2$ which true
/usr/bin/true
sh-4.2$ which false
/usr/bin/false
sh-4.2$ file /usr/bin/true
/usr/bin/true: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=2697339d3c19235
06e10af65aa3120b12295277e, stripped
sh-4.2$ file /usr/bin/false
/usr/bin/false: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=b160fa513fcc13
537d7293f05e40444fe5843640, stripped
sh-4.2$
Run Code Online (Sandbox Code Playgroud)
然而,我发现最令人惊讶的是它们的大小。我希望他们只是每一字节数,因为true
基本上是exit 0
和false
是exit 1
。
sh-4.2$ true …
Run Code Online (Sandbox Code Playgroud) 我最近有一项任务是理解二进制 Linux 程序。但是,该程序是二进制形式的。
我使用了命令file
,strings
和objdump
对它在做什么以及它调用了什么函数有一个初步的了解。
似乎二进制文件是用调试信息编译的。我还能学到什么?