如何检测 Windows PE 可执行文件是用于本机代码还是托管代码?

问题描述 投票:0回答:1

我一直在分析 Windows PE 可执行文件的二进制文件格式。

我知道如何区分 PE32(32 位)与 PE32+(64 位)以及如何区分 x86 与 x64。

但我知道托管代码使用相同的 PE 可执行格式(.NET、C#、Mono、CLR、程序集等),并且我相信文档中始终将体系结构设置为“x86”。

那么我应该在 PE 文件中检查什么来确定它是用于本机代码还是托管代码?

我尝试查看二进制 PE 文件、查看官方文档以及各种博客和存储库。我还没有找到要查看的字段。我可能在某个地方错过了。

c# .net-assembly portable-executable file-format managed-code
1个回答
0
投票

PE 文件应该能够包含本机代码和托管代码。您可以使用 PEReader 来检测。如果

HasMetadata
为 true,则表示该文件包含托管代码。

using var fs = File.OpenRead(FILEPATH);
using var reader = new PEReader(fs);
Console.WriteLine(reader.HasMetadata);
© www.soinside.com 2019 - 2024. All rights reserved.