如果我更改PE的.text,是否需要修改任何headers?

Do I need to modify any headers if I change .text of PE?

我想编辑 PE 文件的 .text 部分并插入机器代码或更改机器代码。

最终 .text 会比原始尺寸大或小。

要使 .exe 仍然有效,我是否需要修改任何 headers?

我需要在 PE 文件中注意什么以确保它在 .text 手术后仍按预期工作?

我建议,如果 .text 部分最终比原来的 ,你只需将其填充,使其与原来的大小相同,这样可以避免您必须进行太多其他更改。如果它最终比原来的更大那么事情会变得非常困难。

.text 部分通常是可执行文件中的第一个部分,并且由于部分根据 PE 中的“部分对齐”条目在内存中对齐 header,下一个部分通常放置在.text 节结束后节对齐的下一个整数倍的内存。通常的部分对齐似乎是 4KiB(0x1000 字节),因此根据 .text 部分的原始大小,您可能有 0 到 4095 字节的空闲空间 space 以在碰撞之前将 .text 部分扩展到下一部分在内存中。

如果内存中有足够的空闲 space 来进行更改,那么您还必须处理可执行文件本身的各部分的对齐方式,这由文件中的“文件对齐方式”条目确定PE header。可执行文件中用于更改的可用空间 space 将是 .text 部分的原始大小与其虚拟大小之间的差异,并且由于通常的文件对齐方式似乎是 512 (0x200) 字节,因此将是在 0 到 511 字节之间。如果文件中没有足够的空闲space(但内存中足够space),则必须将以下部分移动文件对齐的整数倍并调整每个部分的文件指针相应部分。您还需要更新 PE header 中的“代码大小”值,以说明 .text 部分的大小增加。

如果您需要将其扩展到内存中可用的空闲 space 以上,那么事情可能会变得非常困难 - .text 之后的部分通常包含可执行代码引用的数据,因此您可以'不要只是调整以下部分的 in-memory 地址以增加 space 因为这几乎可以保证破坏可执行文件。您可以尝试更新可执行代码以说明对以下部分地址的更改,但您不太可能在所有情况下都能可靠地执行此操作。