![二进制文件的编码格式是什么(OBJ文件,a.out,ELF等..)](https://linux22.com/image/175963/%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E7%9A%84%E7%BC%96%E7%A0%81%E6%A0%BC%E5%BC%8F%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%88OBJ%E6%96%87%E4%BB%B6%EF%BC%8Ca.out%EF%BC%8CELF%E7%AD%89..%EF%BC%89.png)
当我在 vim 中打开二进制文件时,我看到助记符而不是0s
和1s
。我相信这是因为 vim 默认以 ASCII 模式打开文件。我的理解对吗?二进制文件的编码格式是什么?是UTF-8吗?我知道xxd
会将二进制文件十六进制转储为Vim
.但是我想知道为什么 vim 或任何文本编辑器不将二进制文件显示为0s
和1s
。
答案1
在所有现代操作系统上,任何二进制文件都将作为一系列字节(即 8 位组)进行存储和处理。事实上,任何文本文件也会以这种方式存储。
在大多数情况下,文本编辑器(或二进制文件编辑器)被设计为显示字节,因为它们是存储单位。如果我想编辑一个二进制文件以包含不同的值,那么一次编辑一个字节比一次编辑多个位更有用。例如,如果我正在编辑一个数据文件以将值从 1234 更改为 5678,那么搜索字节04 d2
ord2 04
然后将它们交换为16 2e
or2e 16
比在流中查找某些位序列要容易得多t 字节对齐。
Vim 以及许多其他文本编辑器都会以使用单字节编码的模式打开二进制文件(在 Vim 中通常是这样latin1
)。它使用什么编码并不是很有趣,因为字符编码用于文本数据(即表示人类可以理解的内容的数据),而不是二进制数据。使用单字节编码的目的是任何字节序列都是有效的,并且在加载或保存时不会发生修改。
最后,请注意,即使是二进制文件通常也具有某种结构,即使它不像文本文件那么明显。例如,ELF 文件将以字节 0x7f 开头,然后是字符ELF
。然后它将包含类(32 位或 64 位)、字节顺序、版本和 ABI 的字节。与文本文件不同,除非您熟悉格式,否则它们不是易于阅读的形式。