如何获取程序集 dll 的处理器架构?

发布于 2024-10-02 17:39:08 字数 101 浏览 4 评论 0原文

我可以通过在 C# 中以编程方式加载 dll 来获取处理器架构吗?

有没有一个类可以做到这一点?

我需要了解 dll 是否是 x86、x64、MSIL 等。

Can I get the processor architecture by loading the dll programmatically in c#?

Is there a class that can do this?

I need to get wether the dll is x86, x64, MSIL etc..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

‖放下 2024-10-09 17:39:08

假设您只查看 .net 程序集,则可以使用 CorFlags.exe 用于查看图像的标题。

这篇博文解释了确定的用法如何读取结果。摘抄:

用法:Corflags.exe 程序集 [选项]

如果未指定选项,则显示给定图像的标志。

...

以下是标头每个组成部分的含义:

版本:包含二进制文件所用的 .NET Redist 版本
已建成。

CLR 标头:2.0 表示 .Net 1.0 或 .Net 1.1 (Everett) 图像,而 2.5 表示 .Net 2.0 (Whidbey) 图像。

CorFlags:这是通过 OR'g 特定标志来计算的,以指示是否
图像是ILONLY,它的位数等和
由加载程序使用。 ILONLY:托管
图像允许包含原生
代码。要成为“anycpu”,图像应
仅含有IL。

32BIT:即使您有一个仅包含 IL 的图像,它仍然可能
有平台依赖性,32BIT
flag用于区分“x86”
来自“anycpu”图像的图像。 64位
图像由事实来区分
他们的 PE 类型为 PE32+。
最有趣的方面是标头的 PE 和 32BIT 标志。
这些结合起来指定程序集
类型。这是它们的样子
喜欢:

  • anycpu:PE = PE32 且 32BIT = 0
  • x86:PE = PE32 且 32BIT = 1
  • 64 位:PE = PE32+ 且 32BIT = 0

Assuming you are only looking at .net assemblies, you can use CorFlags.exe for look at the header of the image.

This blog post explains the usage to determing how to read the results. Excerpt:

Usage: Corflags.exe Assembly [options]

If no options are specified, the flags for the given image are displayed.

...

Here is what each component of the header means:

Version: Contains the version of .NET Redist with which the binary is
built.

CLR Header: 2.0 indicates a .Net 1.0 or .Net 1.1 (Everett) image while 2.5 indicates a .Net 2.0 (Whidbey) image.

CorFlags: This is computed by OR’g specific flags to indicate whether the
image is ILONLY, its bitness etc. and
is used by the loader. ILONLY: Managed
images are allowed to contain native
code. To be “anycpu” an image shall
only contain IL.

32BIT: Even if you have an image that only contains IL it still might
have platform dependencies, the 32BIT
flag is used to distinguish “x86”
images from “anycpu” images. 64-bit
images are distinguished by the fact
that they have a PE type of PE32+.
The most interesting aspect is the PE and the 32BIT flag of the header.
These combine to specify the assembly
types. Here is how they would look
like for:

  • anycpu: PE = PE32 and 32BIT = 0
  • x86: PE = PE32 and 32BIT = 1
  • 64-bit: PE = PE32+ and 32BIT = 0
风筝有风,海豚有海 2024-10-09 17:39:08

试图通过加载程序集来找出答案是先有鸡还是先有蛋的命题。如果您没有收到 BadImageFormatException,那么拱门是合适的,您不再关心它是什么。如果确实出现异常,那么程序的配置就是错误的。在代码中你对此无能为力。

Trying to find out by loading the assembly is a chicken-and-egg proposition. If you don't get a BadImageFormatException then the arch is appropriate and you no longer care what it is. If you do get the exception then the program's configuration is wrong. Nothing you can do about that in code.

甜中书 2024-10-09 17:39:08

您还可以使用 FileStream 读取程序集文件。 Windows 可执行文件的格式在 Microsoft pe/coff 规范中指定。您可以在此处阅读:

http://www.microsoft.com/whdc /system/platform/firmware/pecoff.mspx

You can also read the assembly file using a FileStream. The format of windows executable files is specified in the Microsoft pe/coff spec. You can read it here:

http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文