Bagaimana cara melihat informasi versi file PE EXE / DLL?


31

Di Windows ada halaman informasi versi di jendela properti file executable / library. Bagaimana cara melihat info itu di Ubuntu?


2
Maksud Anda cara melihat informasi seperti itu dari binari / pustaka Linux atau windows EXE / DLL menggunakan utilitas Linux?
João Pinto

1
Seperti yang saya jelaskan dalam judul pertanyaan, maksud saya PE (Windows) EXE dan file DLL (untuk melihat menggunakan utilitas Linux tentu saja).
Ivan

Jawaban:



29

Saya sedang bekerja di alat yang disebut pev untuk mengambil informasi tentang file PE pada baris perintah.

Versi file dapat diambil dengan -popsi:

pev -p program.exe

pev tersedia di Ubuntu dalam pevpaket .


3
@Van, Anda mungkin mempertimbangkan menerima jawaban ini sebagai gantinya.
Russell Silva

Instruksi ini sudah usang . Anda mungkin ingin mempertimbangkan untuk memperbaruinya.
Ploni

11

Dari gnome-exe-thumbnailernaskah, disarankan oleh Scott Ritchie:

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

mengekstrak informasi versi, mencetak beberapa data biner yang dicampur dengan teks UTF-16. Script mengubahnya menjadi teks yang dapat dibaca dengan memiparnya melalui:

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'

Perintah keseluruhan kemudian 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 wrestooldisediakan oleh icoutilpaket yang tersedia sebagai paket standar Debian sejak perjalanan pulang.
tripleee

Anda dapat membuatnya lebih sederhana dengan hanya menyalurkan melalui| hexdump -C
Tomofumi

Di Ubuntu 18.04 itu ada di dalam icoutils paket.
Bjorn Reppen

6

Sebagai alternatif untuk menggunakan tr dan sed untuk mem-parsing output dari solusi @ mechanical-snail, berikut adalah GNU strings dan GNU grep versi:

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

FileVersion
Release 0.65
ProductVersion
Release 0.65

MEMPERBARUI:

Alternatif lain adalah versi terbaru dari exiftool oleh Phil Harvey (ini didasarkan pada perl, mudah dipasang di Linux jika distro Anda tidak memilikinya, juga tersedia untuk Mac dan Windows). Ini memiliki banyak opsi pemformatan.

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

File Version                    : Release 0.67
Product Version                 : Release 0.67

Paket apa di Ubuntu / Debian yang memiliki exiftool? Sepertinya libimage-exiftool-perl?
Xen2050

Saya hanya mengunduh kode sumber dan membuatnya secara lokal. Unduh file tar.gz dari situs web (The "Download Versi xx.yy" di bagian atas owl.phy.queensu.ca/~phil/exiftool ), ekstrak file dan lihat bagian PEMASANGAN file README untuk bagaimana membangunnya menggunakan perl dan kemudian menginstalnya ke / usr / local / bin
dcg

4

Jika Anda menginstal gnome-exe-thumbnailerpaket, Anda cukup melihat nomor versi di nautilus.

Kode untuk melakukan ini secara manual tersedia di /usr/bin/gnome-exe-thumbnailer.sh


@Scott .. Terima kasih. berfungsi .. kode yang relevan sangat mudah digunakan dalam skrip lain ... Saya berasumsi bahwa apa yang Anda maksud dengan "Anda cukup melihat nomor versi di nautilus" , adalah bahwa nomor versi muncul dicangkokkan ke dalam .exe ikon di Nautilus .. ide yang menarik .. Secara pribadi, saya jarang menggunakan tampilan ikon, tetapi potongan kode sangat bagus untuk saya ..
Peter.O

-1

Saya baru tahu sendiri cara membuat dict python yang bagus dengan informasi (saya mencari-cari di sekitar saya dan beberapa alasan di sini) dan ingin mempresentasikan metode saya di sini:
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)

Saya melisensikannya di bawah Lisensi MIT ... siapa pun yang merasa perlu membuat skrip yang bermanfaat atau hal-hal lain dengannya ...

Dan lihat Github Gists - spookyahell / peinfo.py untuk contoh implementasi metode ini di skrip lain ...


Selamat Datang di Tanya Ubuntu! Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Kevin Bowen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.