Vim 程序的文件格式
我想知道编译后的程序源代码(例如用C或Rust编写的)将以何种格式生成 我知道输出文件是机器语言中的二进制编码文件(就像每本手册和文档所解释的那样)。我认为用我选择的编辑器(如VIM)打开文件应该会显示很多1和0,对吗?但是每次我在网上搜索这个主题时,我只会发现如何用十六进制的VI打开一个二进制文件(主要使用'xxd') 难道没有办法像查看二进制文件一样查看二进制文件吗?-->100101111Vim 程序的文件格式,vim,binary,output,Vim,Binary,Output,我想知道编译后的程序源代码(例如用C或Rust编写的)将以何种格式生成 我知道输出文件是机器语言中的二进制编码文件(就像每本手册和文档所解释的那样)。我认为用我选择的编辑器(如VIM)打开文件应该会显示很多1和0,对吗?但是每次我在网上搜索这个主题时,我只会发现如何用十六进制的VI打开一个二进制文件(主要使用'xxd') 难道没有办法像查看二进制文件一样查看二进制文件吗?-->100101111 编译程序的格式是什么 1和0有点浪费屏幕空间,因此在1997年,一位非常聪明的人发现,使用以下gen
编译程序的格式是什么 1和0有点浪费屏幕空间,因此在1997年,一位非常聪明的人发现,使用以下genius方案可以有效地打包信息:
二进制巫术
0000 --> 0
0001 --> 1
0010 --> 2
0011 --> 3
...
1110-->E
1111-->F
因此,通过使用符号0、1、…、9、A、B、…、F,您可以同时表示所有四位。当您使用当代二进制数据显示工具(通常称为“十六进制编辑器”以纪念此魔法)时,您将看到以这种高效表示方式显示的数据位。正如许多人在这里所说,以二进制为基查看二进制文件可能是无用的,但如果您想,
xxd
正是一个很好的工具(带有-b
选项),您不需要vim来使用它:
$ cat my_bin_file | xxd -b
当你用文本编辑器打开一个二进制文件时,你会看到
字节
而不是位
作为一个可打印(或不可打印-那么你甚至看不到它们)字符的表示。既然你提到了vim
和xxd
,我假设你是在POSIX系统上(比如Linux)?然后,阅读关于这个问题的文章。我给你的建议是,你不应该试图自己解析一个ELF文件,有一些库可以帮助你,即使有这些库的帮助,你也应该在做这件事之前仔细考虑。另外,请阅读,因为您的问题是:您告诉我们您想读取一个可执行文件,但不要告诉我们原始问题。可执行代码需要由操作系统加载,因此代码通常打包到某种容器格式中,操作系统知道如何读取,操作系统加载程序可以从中加载相关部分(数据、代码、重新定位等)。实际的程序代码就在那里的某个地方,只是不在顶部。最接近纯代码二进制的是旧代码。@EugeneSh:是的。这就是为什么在那之前计算几乎没有进展的原因。只是真的很难读取任何东西…你一定是在开玩笑。或者我误解了你。二进制到十六进制的转换是有点老了。就连ASCII标准也要老得多。我记得我已经把程序作为十六进制代码输入了我们学校的Apple-][而且可能会把它扔掉。那是1997年之前的一段时间了。。。