如何知道dll文件是面向32位系统还是面向64位系统的?

如何知道dll文件是面向32位系统还是面向64位系统的?
在发布dll时,可以选择编译为x86模式、x64模式以及Any Cpu模式等。那么对于已经发布的dll文件,怎么知道它是支持什么系统的呢?

方法一:

简便方法:
直接用记事本或者notepad++打开exe文件(dll文件),会有很多乱码,不要头疼,接下来只需要在第二段中找到PE两个字母,在其后的不远出会出现d? 或者L。若是d,则证明该程序是64位;若是L,则证明是32位。
在这里插入图片描述

方法二:

我们可以通过dll的PE Image File中指定位置的字节来判断dll文件是x86的还是x64的。如下是代码示例:

public static ushort GetPEArchitecture(string filePath)
{
    ushort architecture = 0;
    try
    {
        using (System.IO.FileStream fStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        {
            using (System.IO.BinaryReader bReader = new System.IO.BinaryReader(fStream))
            {
                if (bReader.ReadUInt16() == 23117) //check the MZ signature
                {
                    fStream.Seek(0x3A, System.IO.SeekOrigin.Current);  //seek to e_lfanew.
                    fStream.Seek(bReader.ReadUInt32(), System.IO.SeekOrigin.Begin); //seek to the start of the NT header.
                    if (bReader.ReadUInt32() == 17744)  //check the PE\0\0 signature.
                    {
                        fStream.Seek(20, System.IO.SeekOrigin.Current);//seek past the file header, 
                        architecture = bReader.ReadUInt16(); //read the magic number of the optional header.
                    }
                }
            }
        }
    }
    catch { }
    return architecture;
}

执行上面的代码会返回下面两种可能的结果:

12 0x10b - PE32
0x20b - PE32+
前者是x86的后者是x64的。

方法三:Reflector

 对于.Net dll文件,用Reflector工具可进行辨别:

在这里插入图片描述

其中的Platform Target就指明了该dll在编译时选择的目标系统。

方法四:CorFlags.exe工具

使用Vistual Studio.Net自带的corflags工具,先打开vs.net 命令窗口:

在这里插入图片描述
输入coreflags :

在这里插入图片描述

其中PE和32BIT的值可以看出该dll支持的系统位数:

anycpu: PE = PE32 and 32BIT = 0
x86: PE = PE32 and 32BIT = 1
x64: PE = PE32+ and 32BIT = 0

(可参考:http://blogs.msdn.com/b/gauravseth/archive/2006/03/07/545104.aspx)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值