Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 程序的文件格式_Vim_Binary_Output - Fatal编程技术网

Vim 程序的文件格式

Vim 程序的文件格式,vim,binary,output,Vim,Binary,Output,我想知道编译后的程序源代码(例如用C或Rust编写的)将以何种格式生成 我知道输出文件是机器语言中的二进制编码文件(就像每本手册和文档所解释的那样)。我认为用我选择的编辑器(如VIM)打开文件应该会显示很多1和0,对吗?但是每次我在网上搜索这个主题时,我只会发现如何用十六进制的VI打开一个二进制文件(主要使用'xxd') 难道没有办法像查看二进制文件一样查看二进制文件吗?-->100101111 编译程序的格式是什么 1和0有点浪费屏幕空间,因此在1997年,一位非常聪明的人发现,使用以下gen

我想知道编译后的程序源代码(例如用C或Rust编写的)将以何种格式生成

我知道输出文件是机器语言中的二进制编码文件(就像每本手册和文档所解释的那样)。我认为用我选择的编辑器(如VIM)打开文件应该会显示很多1和0,对吗?但是每次我在网上搜索这个主题时,我只会发现如何用十六进制的VI打开一个二进制文件(主要使用'xxd')

难道没有办法像查看二进制文件一样查看二进制文件吗?-->100101111


编译程序的格式是什么

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年之前的一段时间了。。。