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?

Ivan
sumber
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:

-1

Anda mungkin perlu menginstal penampil file PE pihak ketiga, seperti http://www.ucware.com/apev/index.htm

pengguna4124
sumber
Apakah tidak ada alat asli Linux untuk ini?
Ivan
7
$ 25 untuk penampil informasi file? Serius?
Mekanik siput
5
Catatan untuk pengunjung setelah 5 April 2013: Perangkat lunak ini tampaknya telah dihentikan, dan tidak lagi tersedia dari pengembang.
Moshe Katz
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 .

Fernando
sumber
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'.

Siput mekanik
sumber
+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
dcg
sumber
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 Ritchie
sumber
@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 ...

DelphiGeekGuy
sumber
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