我一直在分析 Windows PE 可执行文件的二进制文件格式。
我知道如何区分 PE32(32 位)与 PE32+(64 位)以及如何区分 x86 与 x64。
但我知道托管代码使用相同的 PE 可执行格式(.NET、C#、Mono、CLR、程序集等),并且我相信文档中始终将体系结构设置为“x86”。
那么我应该在 PE 文件中检查什么来确定它是用于本机代码还是托管代码?
我尝试查看二进制 PE 文件、查看官方文档以及各种博客和存储库。我还没有找到要查看的字段。我可能在某个地方错过了。
PE 文件应该能够包含本机代码和托管代码。您可以使用 PEReader 来检测。如果
HasMetadata
为 true,则表示该文件包含托管代码。
using var fs = File.OpenRead(FILEPATH);
using var reader = new PEReader(fs);
Console.WriteLine(reader.HasMetadata);