可执行文件是什么样的?

时间:2014-07-17 18:38:51

标签: assembly binary hex executable

如果我在HEX编辑器中打开可执行文件,我会看到1和0以十六进制表示法吗?

理论上也可以手工编写可执行文件,用于简单的事情,例如" Hello World"程序

2 个答案:

答案 0 :(得分:1)

问题一:是的,你会看到一堆十六进制数字。但任何文件格式都是如此。如果您在十六进制编辑器中打开文本文件,您仍然会看到一堆十六进制数字。但是,如果您在文本编辑器(例如记事本)中打开文本文件,则会看到文本,如果您在文本编辑器中打开可执行文件,则会看到废话,可能带有一些清晰的文本其中的碎片。

是的,理论上可以在十六进制编辑器中手动创建可执行文件。对于某些可执行格式,它更容易,有些 - 更难。非常古老的COM format of MS-DOS是最简单的 - 它完全没有标题,最小的有效COM文件只有几个字节长(甚至可能是一个,我忘了)。现代可执行格式 - PEELF - 有一个相当大的标题,用于描述文件的其余部分,指定代码的位置,数据的位置,从哪里导入的函数其他文件等。手动创建文件时,您必须按照规范填写所有这些标题字段。

一般来说,这不是一项富有成效的尝试 - 编译器/链接器组合将为您创建一个可执行文件,而且工作量更少。

答案 1 :(得分:1)

如果您尝试在文本表示中查看可执行文件,则在任何文本编辑器中,您都会看到如下内容:

^?ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@@^D@^@^@^@^@^@@^@^@^@^@^@^@^@x^Q^@^@ ^@^@^@^@^@^@^@^@@^@8^@ ^@@^@^^^@ES

这是因为有字节,代码不是符合ASCII的文本符号。

但是如果你在HEX编辑器中打开它,它就像是:

00005f0: 0100 0200 4865 6c6c 6f20 576f 726c 6400  ....Hello World.
0000600: 011b 033b 3400 0000 0500 0000 00fe ffff  ...;4...........
0000610: 8000 0000 40fe ffff 5000 0000 2cff ffff  ....@...P...,...
0000620: a800 0000 50ff ffff c800 0000 e0ff ffff  ....P...........
0000630: f000 0000 0000 0000 1400 0000 0000 0000  ................

这里的字节用HEX表示。

如果您需要直接修改可执行文件,您很可能会发现HEX编辑更好。

然后你可以在HEX编辑器中打开它:

enter image description here

改变一下:

enter image description here

这是一个结果:

ruslan@ruslan-Latitude-E6430:~/Documents$ ./hello 
Hello+World