python 判断dll是32位还是64位 20

 我来答
lpe234
2017-08-14 · TA获得超过2778个赞
知道小有建树答主
回答量:1250
采纳率:50%
帮助的人:565万
展开全部
#_*_coding:gb2312_*_  
  
  
########################  
#Writer:Write by lhsbqb#  
#Date:2012-07-16       #  
######################## 

import sys  
  
  
class GetDllBit:  
  
  
    def __init__(self, dll_name=""):  
        if len(sys.argv) == 2: #获取DLL软件名  
            #print sys.argv[1].decode('gb2312')  
            self.dll_name = sys.argv[1]  
            self.Oper()  
        elif dll_name:  
            self.dll_name = dll_name  
            self.Oper()  
        else:  
            print "Error, Please input only one dll file name."  
              
  
  
  
  
              
    def Oper(self): #总操作 获取pe标志 找到pe入口   
        f = open(self.dll_name, "rb").read(80)  
  
  
        s1 = f[60:61] #低位  
        s2 = f[61:62] #高位  
          
        self.CheckDll(self.Convert(hex(ord(s1))),self.Convert_H(hex(ord(s2))))  
  
  
  
  
    def CheckDll(self, one, two): #判断DLL是多少位  
        res_num = int(one) + int(two) + 6  
  
  
        f = open(self.dll_name, "rb").read(res_num)  
  
  
        for c in f[res_num-2:res_num-1]:  
            #print("f[res_num-2:res_num-1]",hex(ord(c)))  
            s_1 = hex(ord(c))  
              
        for c in f[res_num-1:res_num]:  
            #print("f[res_num-1:res_num]",hex(ord(c)))  
            s_2 = hex(ord(c))  
  
  
        if s_1 == "0x4c" and s_2 == "0x1":  
            print("This program run in 32bit system!")  
        elif s_1 == "0x64" and s_2 == "0x86":  
            print("This program run in 64bit system!")  
        else:  
            print("Error!"+s_1+s_2)  
              
              
        #print("res_num",res_num)          
                  
      
    def Convert(self, ss): #低位 进行编码转换  
        if len(ss) == 3:  
            if ss[-1] == "a" or ss[-1] == "A":  
                ss = 10  
            elif ss[-1] == "b" or ss[-1] == "B":  
                ss = 11  
            elif ss[-1] == "c" or ss[-1] == "C":  
                ss = 12  
            elif ss[-1] == "d" or ss[-1] == "D":  
                ss = 13  
            elif ss[-1] == "e" or ss[-1] == "E":  
                ss = 14  
            elif ss[-1] == "f" or ss[-1] == "F":  
                ss = 15  
            else:  
                ss = int(ss[-1])  
        elif len(ss) == 4:  
            if ss[-1] == "a" or ss[-1] == "A":  
                ss1 = 10  
            elif ss[-1] == "b" or ss[-1] == "B":  
                ss1 = 11  
            elif ss[-1] == "c" or ss[-1] == "C":  
                ss1 = 12  
            elif ss[-1] == "d" or ss[-1] == "D":  
                ss1 = 13  
            elif ss[-1] == "e" or ss[-1] == "E":  
                ss1 = 14  
            elif ss[-1] == "f" or ss[-1] == "F":  
                ss1 = 15  
            else:  
                ss1 = int(ss[-1])  
  
  
            if ss[-2:-1] == "a" or ss[-2:-1] == "A":  
                ss2 = 10*16  
            elif ss[-2:-1] == "b" or ss[-2:-1] == "B":  
                ss2 = 11*16  
            elif ss[-2:-1] == "c" or ss[-2:-1] == "C":  
                ss2 = 12*16  
            elif ss[-2:-1] == "d" or ss[-2:-1] == "D":  
                ss2 = 13*16  
            elif ss[-2:-1] == "e" or ss[-2:-1] == "E":  
                ss2 = 14*16  
            elif ss[-2:-1] == "f" or ss[-2:-1] == "F":  
                ss2 = 15*16  
            else:  
                ss2 = int(ss[-2:-1])*16  
  
  
            ss = ss1 + ss2              
          
        return ss  
  
  
    def Convert_H(self, ss): #高位 进行编码转换  
        if len(ss) == 3:  
            if ss[-1] == "a" or ss[-1] == "A":  
                ss = 10*16*16  
            elif ss[-1] == "b" or ss[-1] == "B":  
                ss = 11*16*16  
            elif ss[-1] == "c" or ss[-1] == "C":  
                ss = 12*16*16  
            elif ss[-1] == "d" or ss[-1] == "D":  
                ss = 13*16*16  
            elif ss[-1] == "e" or ss[-1] == "E":  
                ss = 14*16*16  
            elif ss[-1] == "f" or ss[-1] == "F":  
                ss = 15*16*16  
            else:  
                ss = int(ss[-1])*16*16  
        elif len(ss) == 4:  
            if ss[-1] == "a" or ss[-1] == "A":  
                ss1 = 10*16*16  
            elif ss[-1] == "b" or ss[-1] == "B":  
                ss1 = 11*16*16  
            elif ss[-1] == "c" or ss[-1] == "C":  
                ss1 = 12*16*16  
            elif ss[-1] == "d" or ss[-1] == "D":  
                ss1 = 13*16*16  
            elif ss[-1] == "e" or ss[-1] == "E":  
                ss1 = 14*16*16  
            elif ss[-1] == "f" or ss[-1] == "F":  
                ss1 = 15*16*16  
            else:  
                ss1 = int(ss[-1])*16*16  
  
  
            if ss[-2:-1] == "a" or ss[-2:-1] == "A":  
                ss2 = 10*16*16*16  
            elif ss[-2:-1] == "b" or ss[-2:-1] == "B":  
                ss2 = 11*16*16*16  
            elif ss[-2:-1] == "c" or ss[-2:-1] == "C":  
                ss2 = 12*16*16*16  
            elif ss[-2:-1] == "d" or ss[-2:-1] == "D":  
                ss2 = 13*16*16*16  
            elif ss[-2:-1] == "e" or ss[-2:-1] == "E":  
                ss2 = 14*16*16*16  
            elif ss[-2:-1] == "f" or ss[-2:-1] == "F":  
                ss2 = 15*16*16*16  
            else:  
                ss2 = int(ss[-2:-1])*16*16*16  
  
  
            ss = ss1 + ss2              
          
        return ss      
  
  
if __name__ == "__main__":  
    gdb = GetDllBit("32.dll")
龙氏风采
2017-08-14 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12817
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部
方法一:Reflector
对于.Net dll文件,用Reflector工具可进行辨别:

其中的Platform Target就指明了该dll在编译时选择的目标系统。
方法二:CorFlags.exe工具
使用Vistual Studio.Net自带的corflags工具,先打开vs.net 命令窗口:

输入coreflags <assembly path>:
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式