我正在使用修补程序,我希望在.text部分的开头添加额外的空间。就像磁盘上的PE部分(原始)以让我们开始说90 90 90 EB 64 ...等我想让它开头让我们说 00 00 00 90 90 90 90 EB 64 ...可以使用c或asm中的windows api完成吗?怎么办?
我使用createfile函数打开文件,mapview将其映射到内存(win api中的两个函数)和我使用MASM
我知道我可以通过调用CreateFile函数并设置更大的文件空间来增加文件大小但是如何才能增加特定的.text部分?
谢谢!
答案 0 :(得分:1)
Win32 API中没有任何内容可以为您处理此问题。您必须自己实际解析文件的PE头及其所有部分:
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
打开现有文件以进行输入,并为输出创建新文件。解析输入文件的PE,写出.text
部分之前的所有内容,然后根据需要写出额外的间距,然后写出.text
部分及其后面的所有内容。并确保您正在更新整个PE中的任何RVA,这些RVA在您添加的额外间距内/之后引用内存地址,因为您正在更改这些地址的偏移量。
完成后,将输入文件替换为输出文件(最好在首先备份后)。