为什么editbin /swaprun:CD /swaprun:NET 改变两个字节?

Why does editbin /swaprun:CD /swaprun:NET change two bytes?

使用选项 /swaprun:CD 和 /swaprun:NET 为 dll 调用 editbin 会更改 dll 的 PE header 字,设置位 $0400 和 $0800(因此实际上它只更改高字节) .

这就是它应该做的。

但它也改变了另一个字节(见十六进制比较)。

任何人都可以向我解释这个字节的含义以及为什么要更改它吗?

编辑:澄清: 具有这些选项的 editbin 应该设置 PE header 的特征字段(这是一个 16 位字)中的 IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 和 IMAGE_FILE_NET_RUN_FROM_SWAP 位。这是我说的第一个字节。 None 这些标志存储在第二个字节中,那么为什么该工具更改的次数过多,这意味着什么?

IMAGE_FILE_HEADER.Characteristics |= IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP|IMAGE_FILE_NET_RUN_FROM_SWAP;

所以 0x2122 -> 0x2d22 (=2122|0x0c00)

并且 IMAGE_OPTIONAL_HEADER.CheckSum 从 0x000a3c31 更改为 0x000a4831