【问题标题】:How can I add extra space at the begining of a PE file section? (Windows API)如何在 PE 文件部分的开头添加额外的空间? (Windows API)
【发布时间】:2016-01-07 00:44:49
【问题描述】:

我正在使用修补程序,我想在 .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 部分?

谢谢!!

【问题讨论】:

    标签: winapi masm portable-executable


    【解决方案1】:

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

    Peering Inside the PE: A Tour of the Win32 Portable Executable File Format.

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

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

    【讨论】:

    • ... 如有必要,使用 rip 相对寻址更新 RVA、.relocs 和所有指令。
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多