2012-04-01 85 views
3

我有一台Windows 7电脑。我听说Window的可执行文件使用PE格式。我试图了解如何组装可执行文件,因此我在十六进制编辑器中打开了一个。他们从标题“MZ”开始,以便计算机知道它是一个.exe文件。大部分不是英语。我还注意到,在我的特定文件中,它有3个96个NULL字符的“块”。其中两个接近开始,一个在最后。这是什么样子:可执行文件如何在位/字节级别上工作?

BrokenLink

该代码使用FASM汇编。

这是它的代码被编译之前:

BrokenLink

所以我的问题是,如何可执行文件“放在一起”。什么是无尽的NULL字符。另外,如何编辑文件的十六进制代码并添加一个字节数据是“损坏的”,但是如果只是更改一个字节,那很好。

感谢所以mcuh !!!

Christian

回答

2

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

所以我的问题是,可执行文件如何“放在一起”。什么是 无尽的NULL字符。另外,当你编辑一个文件的十六进制代码 ,并添加一个字节的数据是“损坏”时怎么会出现这种情况,但是如何在 刚刚更改一个字节时,就没事了。

便携式可执行文件遵循一定的标准。你不能只是改变字节,因为你会导致文件打破标准。

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

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

+0

谢谢,这非常有帮助。在链接上面的十六进制代码中,它有一个字符串“你需要更多的啤酒空间吗?”。如果我想添加一个额外的问号,如“你是否需要更多的啤酒空间?”,我需要编辑什么字节。我注意到,如果你改变一些东西,比如“你给啤酒喂更多的空间吗?”它仍然可以工作,但如果你添加额外的字节,它将无法工作。 – 2012-04-01 18:01:41

+0

你不能以一种简单的方式。这可能会在只读数据部分。如果你在那里添加一个字节,那么你必须将所有数据从那里转移。如果你这样做了,为了使程序正常工作,那么你必须将该字符串后面的所有数据引用都转换为1字节。 – 2012-04-01 18:13:19

相关问题