Jak wyświetlić informacje o wersji pliku PE EXE / DLL?


31

W systemie Windows znajduje się strona informacji o wersji w oknie właściwości pliku wykonywalnego / biblioteki. Jak wyświetlić te informacje w Ubuntu?


2
Czy masz na myśli, jak przeglądać takie informacje z plików binarnych / bibliotek systemu Linux lub Windows EXE / DLL za pomocą narzędzia Linux?
João Pinto

1
Jak jasno określiłem w tytule pytania, mam na myśli pliki EXE i DLL PE (Windows) (oczywiście do przeglądania za pomocą narzędzia Linux).
Ivan

Odpowiedzi:


-1

Prawdopodobnie musisz zainstalować przeglądarkę plików PE innej firmy, taką jak http://www.ucware.com/apev/index.htm


Czy nie ma do tego rodzimego narzędzia Linux?
Ivan


7
25 USD za przeglądarkę informacji o plikach? Poważnie?
Ślimak mechaniczny

5
Uwaga dla odwiedzających po 5 kwietnia 2013 r .: Wygląda na to, że to oprogramowanie zostało wycofane i nie jest już dostępne od programisty.
Moshe Katz

29

Pracuję w narzędziu o nazwie pev do pobierania informacji o plikach PE w wierszu poleceń.

Wersję pliku można pobrać za pomocą -popcji:

pev -p program.exe

pev jest dostępny na Ubuntu w pevpakiecie .


3
@ Ivan, zamiast tego możesz rozważyć przyjęcie tej odpowiedzi.
Russell Silva

Te instrukcje są nieaktualne . Możesz rozważyć ich aktualizację.
Ploni

11

Ze gnome-exe-thumbnailerskryptu zaproponowanego przez Scotta Ritchiego:

wrestool --extract --raw --type=version inputfile.exe

wyodrębnia informacje o wersji, drukując niektóre dane binarne zmieszane z tekstem UTF-16. Skrypt konwertuje go na czytelny tekst, przepuszczając go przez:

tr '\0, ' '\t.\0' \
| sed 's/\t\t/_/g' \
| tr -c -d '[:print:]' \
| sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p'

Ogólne polecenie jest wtedy wrestool --extract --raw --type=version inputfile.exe | tr '\0, ' '\t.\0' | sed 's/\t\t/_/g' | tr -c -d '[:print:]' | sed -r -n 's/.*Version[^0-9]*([0-9]+\.[0-9]+(\.[0-9][0-9]?)?).*/\1/p'.


+1 wrestoolzapewnia icoutilpakiet, który jest dostępny jako standardowy pakiet Debiana od dawna.
tripleee

możesz to uprościć, przepuszczając go| hexdump -C
Tomofumi,

W Ubuntu 18.04 jest w icoutilspakiecie.
Bjorn Reppen

6

Jako alternatywa do używania tr i sed do analizowania danych wyjściowych z rozwiązania @ Mechanical-snail, oto ciągi znaków GNU i wersja GNU grep :

$ wrestool --extract --raw --type=version putty.exe | strings -el | grep Version -A 1

FileVersion
Release 0.65
ProductVersion
Release 0.65

AKTUALIZACJA:

Inną alternatywą jest najnowsza wersja exiftoola autorstwa Phila Harveya (jest oparta na Perlu, łatwa do zainstalowania na Linuksie, jeśli nie ma go w dystrybucji, dostępna także na Maca i Windowsa). Ma wiele opcji formatowania.

# Example with exiftool 10.47
$ exiftool -FileVersion -ProductVersion putty.exe

File Version                    : Release 0.67
Product Version                 : Release 0.67

Jaki pakiet w Ubuntu / Debian ma exiftool? Wygląda libimage-exiftool-perl?
Xen2050,

Właśnie pobieram kod źródłowy i buduję go lokalnie. Pobierz plik tar.gz ze strony internetowej (link „Pobierz wersję xx.yy” u góry owl.phy.queensu.ca/~phil/exiftool ), rozpakuj pliki i zobacz sekcję INSTALACJA pliku README jak go zbudować za pomocą Perla, a następnie zainstalować go w / usr / local / bin
dcg

4

Jeśli zainstalujesz gnome-exe-thumbnailerpakiet, możesz po prostu spojrzeć na numer wersji w nautilus.

Kod do zrobienia tego ręcznie jest dostępny w /usr/bin/gnome-exe-thumbnailer.sh


@Scott .. Dzięki. to działa .. odpowiedni kod jest bardzo prosty w użyciu w innym skrypcie ... Zakładam, że to, co rozumiesz przez „możesz po prostu spojrzeć na numer wersji w nautilus” , to to, że numer wersji pojawia się zaimportowany do pliku .exe ikona w Nautilusie ... ciekawy pomysł .. Osobiście rzadko korzystam z widoku ikon, ale fragment kodu jest dla mnie świetny ..
Peter.O

-1

Właśnie dowiedziałem się, jak stworzyć ładny dyktafon z informacjami (rozglądałem się wokół i z jakiegoś powodu znalazłem się tutaj) i chciałbym przedstawić tutaj moją metodę:
Github Gists - spookyahell / exe2version_info.py

'''Licensed under the MIT License :)'''

import pefile
import pprint
pe =  pefile.PE('example.exe')


string_version_info = {}

for fileinfo in pe.FileInfo[0]:
    if fileinfo.Key.decode() == 'StringFileInfo':
        for st in fileinfo.StringTable:
            for entry in st.entries.items():
                string_version_info[entry[0].decode()] = entry[1].decode()

pprint.pprint(string_version_info)

Licencjonuję go na podstawie licencji MIT ... może ktoś, kto czuje potrzebę tworzenia przydatnych skryptów lub innych rzeczy z tym ...

I zobacz Github Gists - spookyahell / peinfo.py, aby zobaczyć przykładową implementację tej metody w innym skrypcie ...


Witamy w Ask Ubuntu! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Kevin Bowen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.