var modules = assembly.GetModules();
var kinds = new List<PortableExecutableKinds>();
var images = new List<ImageFileMachine>();
foreach (var module in modules)
{
PortableExecutableKinds peKinds;
ImageFileMachine imageFileMachine;
module.GetPEKind(out peKinds, out imageFileMachine);
kinds.Add(peKinds);
images.Add(imageFileMachine);
}
var distinctKinds = kinds.Distinct().ToList();
var distinctImages = images.Distinct().ToList();
4 回答
如果您只想在给定的dll上找到它,那么您可以使用属于Windows SDK的CorFlags工具:
如果您想使用代码执行此操作,请查看Module类的GetPEKind方法:
然后,您需要检查
peKind
以检查其值 . 有关详细信息,请参阅MSDN docs了解PortableExecutableKinds
.谢谢阿德里安!我已经在PowerShell中重写了代码片段,因此我可以在服务器上使用它 .
C#片段,基于Powershell的答案:
谢谢阿德里安和彼得!这是Peter的Get-Bitness的修改版本,1)从管道中获取要检查的文件列表,2)如果查看非.NET DLL(例如,如果它查看某些C DLL),则不会死掉它:
我是PowerShell的新手,所以这可能不是最佳实践的一个例子 .
或者,根据https://stackoverflow.com/a/4719567/64257,PowerShell Community Extensions中可能还有一个方便的Get-PEHeader cmdlet .