为什么用vim文本编辑器打开目标文件(linux中的.o文件)看起来很乱?

时间:2016-09-14 04:52:21

标签: linux vim operating-system system elf

当我们用文本编辑器打开目标文件时,我们看到的符号是什么,它们(像@,..这样的符号)有什么意义?由于目标文件是二进制文件,我们希望看到1和0,但为什么我们看到这些符号呢?

3 个答案:

答案 0 :(得分:3)

因为二进制文件包含二进制数据,而不是文本编辑器期望看到的ASCII数据。编辑器将如何显示"不可打印"字符。

在Linux上,如果你真的想看到0和1,你可以使用od转储其他格式的文件(八进制,十六进制,二进制)。

答案 1 :(得分:2)

您在C0 Codes中看到的符号为caret notation,它们代表非打印的ASCII字符。

.o files不包含人类可读的文本,因此当Vim尝试将其作为ASCII读取时,它们看起来像废话。

如果您希望将这些字符视为其组件字节(例如<00>而非^@),请尝试:set display+=uhex(另请参阅:help display)。

答案 2 :(得分:0)

  

由于目标文件是二进制文件,我们希望看到1和0&#39>

您的期望不正确。如果要查看0和1,则需要使用显示0和1的工具。

我找不到可以做到这一点的标准实用工具,没有人真的想看到0和1,因为这样的显示会非常冗长。程序员更喜欢十六进制显示,这种显示更加紧凑。例如,十六进制值0xfd可以表示为以下0和1的序列:1111 1101

注1:0和1的序列完全相同,用不同的方式表示。

注2:您可以看到快速表达数字的位置已经失控:0xfffffffd1111 1111 1111 1111 1111 1111 1111 1101

  

但为什么我们会看到这些符号?

vim编辑器将0和1的序列解释为<{1}}字符。例如,&#39; A&#39;的ASCII代码是ASCII,或以下0和1的序列:0x41。完整0100 0001here

为了更好地理解这一点,请在ASCII中创建一个包含以下行的文件foo.txt

vim

然后通过以下方式运行此文件:

AAAAaaaa
BBBBbbbb

请注意,文件中包含的0和1不会发生更改,但上述每个命令都会以不同的方式解释这些0和1。

返回二进制文件。

所有文件都包含一系列字节。不同的工具可以对这些字节进行不同的解释。

当人们说&#34;二进制文件&#34;与&#34;文本文件&#34;,它们通常意味着后者包含字节,其中包含与其关联的可打印od -c foo.txt od -b foo.txt od -tx1 foo.txt cat foo.txt 个字符,前者包含一些字节有 - 可压缩ASCII个字符(二进制文件也常常包含与可打印ASCII对应的字节。有一个strings实用程序可以从&#34;二进制文件中提取这些可打印的字节序列&#34;并将它们解释为&#34; text&#34;。注意,有时这种解释会产生错误&#34;,并解释二进制数据作为可打印的字符串,可以看作here