可执行文件如何在位/字节级别上工作?

时间:2012-04-01 16:09:45

标签: hex executable

我有一台Windows 7电脑。我听说Window的可执行文件使用PE格式。我试图了解可执行文件是如何组装的,所以我在十六进制编辑器中打开了一个。它们以标题“MZ”开头,以便计算机知道它是.exe文件。大多数不是英语。我还注意到在我的特定文件中它有3个96个字符的“块”。其中两个接近开头,一个接近尾声。这就是它的样子:

BrokenLink

此代码使用FASM汇编程序。

这是编译之前的代码:

BrokenLink

所以我的问题是,可执行文件是如何“放在一起”的。什么是无尽的NULL字符。另外,为什么编辑文件的十六进制代码并添加一个数据“损坏”的字节,但是当你改变一个字节时,为什么会这样呢。

非常感谢!

基督教

1 个答案:

答案 0 :(得分:2)

Windows使用的格式是Microsoft的Portable Executable格式。要了解更多信息,您可以阅读文件的specification

  

所以我的问题是,可执行文件是如何“放在一起”的。怎么了   无尽的NULL字符。另外,当你编辑十六进制代码时怎么样   一个文件并添加一个字节数据被“损坏”,但是怎么回事   你改变一个字节,没关系。

Portable Executables遵循一定的标准。你不能只改变字节,因为你会导致文件破坏标准。

因此,在任意位置添加字节可能会破坏格式。例如,PE文件由部分组成。这些部分具有一定的大小,在章节标题中定义。节标题本身是一定大小,在特定偏移处具有特定字段。假设您只是在一个节或节标题中添加一个字节,您可能会通过将字段移动到它们不期望的偏移量来破坏文件,或者使它变得不像原来定义的那样大小。

更改字节会在某处更改值。即使这样,你也可能搞砸了。如果你有一个特定的目标,你应该说出来,我们可以指出你更好的方向来追求它。