在不中断Windows可执行文件的情况下调整代码部分的大小

时间:2014-08-23 16:00:35

标签: windows assembly operating-system file-format

我的项目如下:程序本身就是一个打包器。它压缩原始的可执行代码,就像UPX一样。 。但我有一个问题,PE头表示可执行文件的物理大小,例如,80字节。但是,Windows资源管理器说该程序小于该数字。因此,Windows Loader失败

我不知道如何更改有关大小的PE标头值,以正确反映我的程序所做的更改。我在Microsoft官方文档中寻找此主题,但我找不到它。

我无法显示任何源代码,因为我不知道如何开始。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

1)多年前,我从Michael Tippach's Wuschel's DOS eXtender的源代码,尤其是 PE loader 部分的源代码中学到了很多关于PE格式及其大小和内容的知识。它显示了如何从PE文件中读取重要信息,如何映射导入和导出部分等。

  

潜水指南   搜索CreateProcess点到wdosx097.zip → SRC\WIN32\k32spawn.asmwdosx097.zip → SRC\PE\loadpe.asm

2)我发现另一个用于研究进程和线程以及TLS等在内存中的外观的源代码是来自Wine project PE loader (类似于Linux的二进制级兼容Windows模拟器)

  

潜水指南:搜索CreateProcesshttp://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=CreateProcess)积分至http://source.winehq.org/git/wine.git/blob_plain/HEAD:/dlls/kernel32/process.c

3) PE格式的另一个有价值的来源可能是在开源ReactOS Project(Windows NT二进制级兼容操作系统)中实现的 PE加载程序

  

潜水指南:此http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/proc.c?view=markup文件似乎处理CreateProcess

所有示例都以代码的形式提供PE格式的文档,该代码读取并使用它。除了静态文档之外,它应该给你更多的解释(以及源代码中的一些有用的注释),这些文档现在应该很容易被谷歌推出(如@Cody-grey所示)


所有3个潜水指南都遵循相同的模式。搜索Win32函数CreateProcess的实现,因为这是发音时导致OS加载PE文件并使其活跃的单词。原始实现可能存在很远的几个源文件,例如在一些内核文件中,每个人都信任所有人,所有居民都在努力保持清洁,整体性和清晰,直接和高效的思想流是共同的目标,所有的功能名称都以Rtl..开头而且没有人记得为什么...... < / p>