检查DLL / EXE详细信息有哪些很好的命令行方法?


9

对于大多数Windows可执行文件(DLL,EXE ...),可以使用“属性”(Alt+ Enter)中的“详细信息”选项卡查看版本和其他详细信息。

Windows 7 amd64中shell32.dll的详细信息

我想知道:还有一种命令行方式吗?我对产品版本特别感兴趣,但其他东西也很有用。

需要以下属性,按优先顺序排列:

  • 接受exe / dll路径作为参数
  • 输出到标准输出(所以你可以通过|管道处理其余的)
  • 在所有支持的Windows(XP +)中默认可用
  • 在Windows Vista +中默认可用
  • 在Windows XP中默认可用
  • 可用于商业环境
  • 免费许可证(类似GPL)
  • 便携式(即独立的exe,可能附带DLL)

这已经在Stack Overflow上被问到:命令行工具转储Windows DLL版本?
Alois Mahdal

Answers:


7

在powershell中,get-command "full-path-to-executable" | format-list可以做到这一点。Powershell是Vista及更高版本Windows的新命令行,可以安装在XP中。


我无法让你的代码工作......
soandos

我已经得到了get-command "$args[0]" | format-list,我已经保存aaa.ps1并被称为powershell -File aaa.ps1 shell32.dll但是没有打印任何东西。
Alois Mahdal

@soandos:看来powershell v2是get-command使用任意可执行文件所必需的。
kreemoweet

我有
PowerShell

很好,我不知道,它甚至返回比属性窗口更多的信息。有趣的信息封装在对象的FileInfoVersion属性中ApplicationInfo
mjsr

4

使用Microsoft的DUMPBIN实用程序

它有很多有用的选项,但是,它取决于你想做什么。

但是,它不是免费的,但我相信可以使用Windows SDK自由获得。


3
如果可以使用SDK自由获取,为什么它不是免费的?
CJ7 2016年

4

您可以使用sigcheck.exe作为Sysinternals Suite一部分的便携式工具,例如

$ sigcheck.exe some_app.exe

Sigcheck v2.51 - File version and signature viewer
Copyright (C) 2004-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

C:/Program Files (x86)/Foo App\some_app.exe:
    Verified:   Signed
    Signing date:   14:48 23/12/2015
    Publisher:  X
    Company:    X
    Description:    X
    Product:    Some App
    Prod version:   5.0.0.1241
    File version:   5.0.0.1241
    MachineType:    32-bit

对于老版本的Windows如XP / 2K / 2003(它仍然工作在新的),使用filever.exe工具(检查直接链接exedll.info)以获取有关文件等具体信息:

  • 文件运行的平台
  • 该文件的版本
  • 文件的属性
  • 文件类型
  • 文件的语言
  • 文件是发货类型还是调试类型
  • 文件大小
  • 文件的创建日期
  • 文件的路径

其他一些要考虑:

  • Microsoft COFF二进制文件转储程序(DUMPBIN.EXE)

    显示有关通用对象文件格式(COFF)二进制文件的信息。您可以使用DUMPBIN来检查COFF对象文件,COFF对象的标准库,可执行文件和动态链接库(DLL)。

  • binwalk - 在指定文件中搜索各种CPU架构常用的可执行操作码。易于使用的工具,用于分析,逆向工程和从二进制文件中提取有趣的文件/数据。


有关更多命令,请检查:


3
Function GetProductVersion (sFilePath, sProgram)  
Dim objShell, objFolder, objFolderItem, i  
If FSO.FileExists(sFilePath & "\" & sProgram) Then  
    Set objShell = CreateObject("Shell.Application")  
    Set objFolder = objShell.Namespace(sFilePath)  
    Set objFolderItem = objFolder.ParseName(sProgram)  
    Dim arrHeaders(300)  
    For i = 0 To 300  
        arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)  
        'WScript.Echo i &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)  
        If lcase(arrHeaders(i))= "product version" Then  
            GetProductVersion= objFolder.GetDetailsOf(objFolderItem, i)  
            Exit For  
        End If  
    Next  
End If  
End Function  

Source是一个.vbs文件的链接,可以为您获取文件版本,您可以随意使用它并使用您想要的输出。

船将所有版本的Windows,不确定许可证,非常便携,但不是exe或DLL。


那里有几个答案,我不确定你的意思。但是,我尝试了其中一些,他们似乎有硬编码的notepad.exe路径。是否有一种简单的方法可以将它们包装起来,以便它们接受dll / exe的路径作为参数?最好输出到标准输出?
Alois Mahdal 2012年

它需要一个路径作为参数,产品版本包含在GetProductVersion
soandos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.