Quais são algumas maneiras legais de inspecionar detalhes de DLL / EXE?


13

Com a maioria dos executáveis ​​do Windows (DLL, EXE ...), a versão e outros detalhes podem ser visualizados usando a guia "Detalhes" em "Propriedades" ( Alt+ Enter).

Detalhes de shell32.dll no Windows 7 amd64

Eu me pergunto: existe também uma maneira da linha de comando para fazer isso? Estou particularmente interessado na versão do produto, mas também outras coisas podem ser úteis.

As seguintes propriedades são desejadas, em ordem de precedência:

  • aceita caminho exe / dll como parâmetro
  • saída para saída padrão (para que você possa processar o restante via |tubo)
  • disponível por padrão em todos os Windows suportados (XP +)
  • disponível por padrão no Windows Vista +
  • disponível por padrão no Windows XP
  • utilizável em ambiente comercial
  • licença gratuita (semelhante à GPL)
  • portátil (ex. autônomo, talvez acompanhado por DLL)

Respostas:


9

No PowerShell, get-command "full-path-to-executable" | format-listfaria o truque. Powershell é a nova linha de comando para o Vista e Windows posterior, pode ser instalada no XP.


Eu não posso obter o seu código de trabalho ...
soandos

Eu tenho até onde get-command "$args[0]" | format-list, que eu salvei como aaa.ps1e chamado como, powershell -File aaa.ps1 shell32.dllmas que não imprime nada.
Alois Mahdal

@soandos: parece que o powershell v2 é necessário para que o comando get trabalhe com executáveis ​​arbitrários.
Kreemoweet

Eu tenho o powershell v2
soandos

legal, eu não sabia disso, até retornava um pouco mais de informações do que a janela da propriedade. As informações interessantes estão encapsuladas na FileInfoVersionpropriedade do ApplicationInfoobjeto.
Mjsr

5

Use o utilitário DUMPBIN da Microsoft .

Possui muitas opções úteis, no entanto, depende do que você deseja fazer.

No entanto, não é gratuito, mas acredito que pode ser obtido livremente com o Windows SDK.


3
Por que não é gratuito se pode ser obtido livremente com o SDK?
CJ7

4

Você pode usar uma sigcheck.exeferramenta portátil que faz parte do Sysinternals Suite , por exemplo

$ 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

Para versões mais antigas do Windows, como XP / 2k / 2003 (ainda funciona em novas), use a filever.exeferramenta (verifique o link direto em exedll.info ) para obter informações específicas sobre um arquivo, como:

  • A plataforma na qual o arquivo é executado
  • A versão do arquivo
  • Os atributos do arquivo
  • O tipo de arquivo
  • O idioma do arquivo
  • Se o arquivo é um tipo de remessa ou um tipo de depuração
  • O tamanho do arquivo
  • A data em que o arquivo foi criado
  • O caminho do arquivo

Alguns outros a considerar:

  • O dumper de arquivo binário do Microsoft COFF (DUMPBIN.EXE)

    Exibe informações sobre arquivos binários do Common Object File Format (COFF). Você pode usar DUMPBIN para examinar arquivos de objetos COFF, bibliotecas padrão de objetos COFF, arquivos executáveis ​​e bibliotecas de vínculo dinâmico (DLLs).

  • binwalk- pesquise no (s) arquivo (s) especificado (s) por códigos de operação executáveis ​​comuns a uma variedade de arquiteturas de CPU. Ferramenta fácil de usar para analisar, fazer engenharia reversa e extrair arquivos / dados interessantes de arquivos binários.


Para mais comandos, verifique:


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  

Origem é um link para um arquivo .vbs que pode obter a versão do arquivo para você, e você pode pegar isso e usar a saída da maneira que desejar.

Navios serão todas as versões do Windows, não tenho certeza sobre a licença, muito portátil, mas não exe ou DLL.


Há algumas respostas lá, não tenho certeza de qual delas você quer dizer. No entanto, eu tentei alguns deles, eles parecem ter o caminho para o notepad.exe codificado. Existe uma maneira fácil de embrulhá-los para que eles aceitem o caminho para dll / exe como um parâmetro? Preferencialmente saída para saída padrão?
Alois Mahdal

Ele segue um caminho como parâmetro e a versão do produto está contida emGetProductVersion
soandos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.