使用选项/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 位。这是我说的第一个字节。这些标志都没有存储在第二个字节中,那么为什么该工具会进行不必要的更改,这意味着什么?
最佳答案
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
关于windows - 为什么editbin/swaprun :CD/swaprun:NET change two bytes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38609409/