Jakie są fajne sposoby na sprawdzanie szczegółów DLL / EXE?

9

Z większością plików wykonywalnych Windows (DLL, EXE ...), wersja i inne szczegóły mogą być przeglądane za pomocą zakładki "Szczegóły" w "Właściwościach" Alt + Wchodzić ).

Details of shell32.dll from Windows 7 amd64

Zastanawiam się: czy istnieje również sposób na wykonanie polecenia? Jestem szczególnie zainteresowany wersją produktu, ale także inne rzeczy mogą być przydatne.

Wymagane są następujące właściwości, w kolejności pierwszeństwa:

  • zaakceptuj ścieżkę exe / dll jako parametr
  • wyjście do standardowego wyjścia (aby można było przetworzyć resztę przez | rura)
  • dostępne domyślnie we wszystkich obsługiwanych systemach Windows (XP)
  • domyślnie dostępny w systemie Windows Vista
  • domyślnie dostępny w systemie Windows XP
  • przydatne w środowisku komercyjnym
  • bezpłatna licencja (GPL-like)
  • przenośny (np. samodzielny exe, może towarzyszyć mu DLL)
Alois Mahdal
źródło
Zostało to już zadane w przepełnieniu stosu: Narzędzie wiersza poleceń do zrzutu wersji DLL systemu Windows?
Alois Mahdal

Odpowiedzi:

6

W PowerShell get-command "full-path-to-executable" | format-list załatwi sprawę. Powershell to nowy wiersz poleceń dla systemu Windows Vista i nowszych można zainstalować w systemie XP.

kreemoweet
źródło
Nie mogę uruchomić twojego kodu ...
soandos
Mam tak daleko jak get-command "$args[0]" | format-list, które zapisałem jako aaa.ps1 i zadzwonił jako powershell -File aaa.ps1 shell32.dll ale to niczego nie drukuje.
Alois Mahdal
@soandos: wygląda na to, że powerhell v2 jest wymagany do działania get-command z dowolnymi plikami wykonywalnymi.
kreemoweet
Mam powerhell v2
soandos
miło, nie wiedziałem o tym, nawet zwraca trochę więcej informacji niż okno właściwości. Interesująca informacja jest zawarta w FileInfoVersion własność ApplicationInfo obiekt.
mjsr
4

Użyj Microsoft Narzędzie DUMPBIN .

Ma wiele przydatnych opcji, jednak zależy od tego, co chcesz zrobić.

Nie jest to jednak za darmo, ale wierzę, że można je uzyskać za darmo z Windows SDK.

wizzard0
źródło
2
Dlaczego nie jest za darmo, jeśli można go uzyskać bezpłatnie w SDK?
CJ7
4

Możesz użyć sigcheck.exe przenośne narzędzie, które jest częścią Sysinternals Suite , np.

$ 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

W przypadku starszych wersji systemu Windows, takich jak XP / 2k / 2003 (nadal działa w nowym), użyj filever.exe narzędzie (sprawdź link bezpośredni w exedll.info ) aby uzyskać konkretne informacje o pliku, takie jak:

  • Platforma, na której działa plik
  • Wersja pliku
  • Atrybuty pliku
  • Typ pliku
  • Język pliku
  • Czy plik jest typem wysyłki, czy typem debugowania
  • Rozmiar pliku
  • Data utworzenia pliku
  • Ścieżka do pliku

Inne do rozważenia:

  • Wbudowany plik binarny Microsoft COFF (DUMPBIN.EXE)

    Wyświetla informacje o plikach binarnych Common Object File Format (COFF). Możesz użyć DUMPBIN, aby zbadać pliki obiektów COFF, standardowe biblioteki obiektów COFF, pliki wykonywalne i biblioteki dynamiczne (DLL).

  • binwalk - przeszukuj podany plik (i) w poszukiwaniu wykonywalnych opcodes wspólnych dla różnych architektur procesora. Łatwe w użyciu narzędzie do analizy, inżynierii wstecznej i wyodrębniania interesujących plików / danych z plików binarnych.


Aby uzyskać więcej poleceń, sprawdź:

kenorb
źródło
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  

Źródło to link do pliku .vbs, który może pobrać wersję pliku dla ciebie, i możesz wziąć to i użyć wyjścia, jak chcesz.

Statki będą wszystkie wersje systemu Windows, nie wiem na temat licencji, bardzo przenośne, ale nie exe lub DLL.

soandos
źródło
Jest tam kilka odpowiedzi, nie jestem pewien, który masz na myśli. Jednak wypróbowałem niektóre z nich, wydaje się, że mają ścieżkę do notepad.exe zapisaną na stałe. Czy istnieje łatwy sposób na ich zawinięcie, aby zaakceptowali ścieżkę do pliku dll / exe jako parametr? Najlepiej wyprowadzać na standardowe wyjście?
Alois Mahdal
Przyjmuje ścieżkę jako parametr, a wersja produktu jest zawarta w GetProductVersion
soandos