¿Cuáles son algunas buenas formas de línea de comandos para inspeccionar los detalles de DLL / EXE?

13

Con la mayoría de los ejecutables de Windows (DLL, EXE ...), la versión y otros detalles se pueden ver usando la pestaña "Detalles" en "Propiedades" ( Alt+ Enter).

Detalles de shell32.dll desde Windows 7 amd64

Me pregunto: ¿hay también una forma de línea de comandos para hacer esto? Estoy particularmente interesado en la versión del Producto, pero también otras cosas podrían ser útiles.

Se desean las siguientes propiedades, en orden de precedencia:

  • aceptar ruta exe / dll como parámetro
  • salida a salida estándar (para que pueda procesar el resto a través de la |tubería)
  • disponible por defecto en todos los Windows compatibles (XP +)
  • disponible por defecto en Windows Vista +
  • disponible por defecto en Windows XP
  • utilizable en ambiente comercial
  • licencia gratuita (tipo GPL)
  • portátil (es decir, exe independiente, tal vez acompañado con DLL)
Alois Mahdal
fuente
Esto ya se ha pedido en Stack Overflow: ¿ herramienta de línea de comando para volcar la versión de Windows DLL?
Alois Mahdal

Respuestas:

9

En powershell, get-command "full-path-to-executable" | format-listharía el truco. Powershell es la nueva línea de comandos para Vista y Windows posterior, se puede instalar en XP.

kreemoweet
fuente
No puedo conseguir el código para el trabajo ...
soandos
Llegué a lo get-command "$args[0]" | format-listque guardé aaa.ps1y llamé como powershell -File aaa.ps1 shell32.dllpero no imprime nada.
Alois Mahdal
@soandos: parece que se requiere powershell v2 para que get-command funcione con ejecutables arbitrarios.
kreemoweet
Tengo powershell v2
soandos
bueno, no lo sabía, incluso devolvió un poco más de información que la ventana de propiedades. La información interesante está encapsulada en la FileInfoVersionpropiedad del ApplicationInfoobjeto.
mjsr
5

Use la utilidad DUMPBIN de Microsoft .

Tiene muchas opciones útiles, sin embargo, depende de lo que quieras hacer.

Sin embargo, no es gratis, pero creo que se puede obtener libremente con Windows SDK.

wizzard0
fuente
3
¿Por qué no es gratis si se puede obtener libremente con el SDK?
CJ7
4

Puede usar sigcheck.exeuna herramienta portátil que es parte de Sysinternals Suite , p. Ej.

$ 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 versiones anteriores de Windows como XP / 2k / 2003 (todavía funciona en una nueva), use la filever.exeherramienta (consulte el enlace directo en exedll.info ) para obtener información específica sobre un archivo como:

  • La plataforma en la que se ejecuta el archivo
  • La versión del archivo.
  • Los atributos del archivo.
  • El tipo de archivo
  • El idioma del archivo.
  • Si el archivo es un tipo de envío o un tipo de depuración
  • El tamaño del archivo
  • La fecha en que se creó el archivo.
  • La ruta del archivo

Algunos otros a considerar:

  • El volcador de archivos binarios COFF de Microsoft (DUMPBIN.EXE)

    Muestra información sobre los archivos binarios de formato de archivo de objetos comunes (COFF). Puede usar DUMPBIN para examinar archivos de objetos COFF, bibliotecas estándar de objetos COFF, archivos ejecutables y bibliotecas de enlaces dinámicos (DLL).

  • binwalk- busca en los archivos especificados códigos operativos ejecutables comunes a una variedad de arquitecturas de CPU. Herramienta fácil de usar para analizar, realizar ingeniería inversa y extraer archivos / datos interesantes de archivos binarios.


Para más comandos, verifique:

kenorb
fuente
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 es un enlace a un archivo .vbs que puede obtener la versión del archivo por usted, y puede tomarlo y usar la salida como lo desee.

Se enviarán todas las versiones de Windows, no estoy seguro acerca de la licencia, muy portátil, pero no exe o DLL.

soandos
fuente
Hay un par de respuestas allí, no estoy seguro de a cuál te refieres. Sin embargo, probé algunos de ellos, parecen tener una ruta a notepad.exe codificada. ¿Hay una manera fácil de envolverlos para que acepten la ruta a dll / exe como parámetro? Preferiblemente salida a salida estándar?
Alois Mahdal
Toma una ruta como parámetro, y la versión del producto está contenida enGetProductVersion
soandos