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

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

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 de Windows 7 amd64

Me pregunto: ¿existe 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 prioridad:

  • aceptar la ruta exe/dll como parámetro
  • salida a salida estándar (para que pueda procesar el resto a través de |una tubería)
  • Disponible de forma predeterminada en todos los Windows compatibles (XP+)
  • disponible de forma predeterminada en Windows Vista+
  • Disponible de forma predeterminada en Windows XP.
  • utilizable en entorno comercial
  • licencia gratuita (tipo GPL)
  • portátil (es decir, exe independiente, tal vez acompañado de una DLL)

Respuesta1

En PowerShell, get-command "full-path-to-executable" | format-listfuncionaría. Powershell es la nueva línea de comandos para Vista y versiones posteriores de Windows, se puede instalar en XP.

Respuesta2

Puedes usarsigcheck.exeherramienta portátil que forma parte deSuite Sysinternals, 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 (aún funciona en la nueva), usefilever.exeherramienta (verifique elenlace directoenexedll.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 archivos binarios de formato de archivo de objetos común (COFF). Puede utilizar DUMPBIN para examinar archivos de objetos COFF, bibliotecas estándar de objetos COFF, archivos ejecutables y bibliotecas de vínculos dinámicos (DLL).

  • binwalk- busque en los archivos especificados códigos de operación 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 obtener más comandos, consulte:

Respuesta3

Utilice el de MicrosoftUtilidad DUMPBIN.

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

Sin embargo, no es gratuito, pero creo que se puede obtener gratuitamente con el SDK de Windows.

Respuesta4

Cuando investigué inicialmente esta área problemática, descubrí que usar comandos simples como (Get-Item -Path "C:\path\to\file.exe").VersionInfo.ProductVersion, como se sugiere en las respuestas deesta pregunta SO— no funcionó de manera confiable en todos los ejecutables (valor de retorno vacío). También noté que Explorerhacemostrar de manera confiable los valores en la hoja de Propiedades de un ejecutable determinado, así que decidí construir una función de Powershell para imitar lo que hace Explorer (presumiblemente) para recuperar las propiedades.

Aquí hay una función de Powershell para recuperar todas las propiedades extendidas, incluida la versión del producto.

function Get-AllExtendedProperties {
    param (
        [string]$FilePath
    )
    If (-not $FilePath) {
        Throw "Error: missing `$FilePath parameter"
    }
    $file = Get-Item $FilePath
    If ($file -and $file.Exists) {
        $parentFolder = Split-Path $file.FullName -Parent
        $shell = New-Object -ComObject Shell.Application
        $folder = $shell.Namespace($parentFolder)
        $fileItem = $folder.ParseName($file.Name)
        # Get all extended properties
        $extendedProperties = @{}
        For ($i = 0; $i -lt 300; $i++) {
            $propertyValue = $folder.GetDetailsOf($fileItem, $i)
            if ($propertyValue) {
                $propertyName = $folder.GetDetailsOf($folder.Items, $i)
                $extendedProperties[$propertyName] = $propertyValue
            }
        }
        # Sort the hashtable by property name
        $sortedExtendedProperties = $extendedProperties.GetEnumerator() | Sort-Object Name | ForEach-Object { $_.Key = $_.Key.Trim(); $_ }
        Write-Output $sortedExtendedProperties
    } Else {
        Throw "Error: missing file"
    }
}

Uso

La forma más sencilla de utilizar esta función es copiarla/pegarla en una ventana de Powershell y presionar Return ↵. Entonces puedes usarlo así:

Get-AllExtendedProperties -FilePath "C:\path\to\file.exe"

Si desea obtener el valor de una propiedad específica, como la versión del producto, utilícelo así:

Get-AllExtendedProperties -FilePath "C:\path\to\file.exe" | Where-Object {$_.Name -eq 'Product Version'} | Select-Object -ExpandProperty Value

información relacionada