Winapi 如何在PE文件节的开头添加额外空间?(Windows API)

Winapi 如何在PE文件节的开头添加额外空间?(Windows API),winapi,masm,portable-executable,Winapi,Masm,Portable Executable,我正在使用一个补丁程序,我想在.text部分的开头添加额外的空间。比如,如果磁盘上的PE部分(raw)以90 EB 64开头。。。等我想让它开始,让我们说00 00 9090 90 90 EB 64。。。这可以用c或asm中的windows api来完成吗?怎么办 我正在使用函数createfile打开文件,并使用mapview将其映射到内存中(这两个函数都来自WinAPI),我正在使用MASM 我知道我可以通过调用CreateFile函数并设置更大的文件空间来增加文件大小,但是如何增加特定的.

我正在使用一个补丁程序,我想在.text部分的开头添加额外的空间。比如,如果磁盘上的PE部分(raw)以90 EB 64开头。。。等我想让它开始,让我们说00 00 9090 90 90 EB 64。。。这可以用c或asm中的windows api来完成吗?怎么办

我正在使用函数createfile打开文件,并使用mapview将其映射到内存中(这两个函数都来自WinAPI),我正在使用MASM

我知道我可以通过调用CreateFile函数并设置更大的文件空间来增加文件大小,但是如何增加特定的.text部分呢


谢谢

Win32 API中没有任何东西可以为您处理此问题。您必须亲自解析文件的PE头及其所有部分:

打开现有文件进行输入,并创建新文件进行输出。解析输入文件的PE,写出
.text
部分前面的所有内容,然后根据需要写出额外的间距,然后写出
.text
部分及其后面的所有内容。并确保您正在更新整个PE中引用额外间隔内/之后的内存地址的任何RVA,因为您正在更改这些地址的偏移量


完成后,用输出文件替换输入文件(最好先备份它)。

。。。如有必要,使用rip相对寻址更新RVAs、.relocs和所有指令。