Як переглянути інформацію про версію файлу PE EXE / DLL?


31

У Windows є вікно інформації про версію у вікні властивостей виконуваного файлу / бібліотеки. Як переглянути цю інформацію в Ubuntu?


2
Ви маєте на увазі, як переглядати таку інформацію з бінарних файлів / бібліотек Linux або Windows EXE / DLL за допомогою утиліти Linux?
Жоао Пінто

1
Як я чітко вказав у назві питання, я маю на увазі файли PE (Windows) EXE та DLL (для перегляду, звичайно, за допомогою утиліти Linux).
Іван

Відповіді:


-1

Можливо, вам потрібно встановити сторонній переглядач файлів PE, наприклад, http://www.ucware.com/apev/index.htm


Чи не існує для цього рідного інструменту Linux?
Іван


7
$ 25 за перегляд інформації про файл? Серйозно?
Механічний равлик

5
Примітка для відвідувачів після 5 квітня 2013 року: Це програмне забезпечення, здається, було припинено, і більше не доступне для розробника.
Моше Кац

29

Я працюю в інструменті під назвою pev для отримання інформації про файли PE в командному рядку.

Версію файлу можна отримати за допомогою -pпараметра:

pev -p program.exe

pev доступний на Ubuntu в pevпакеті .


3
@Ivan, ви можете замість цього прийняти цю відповідь.
Рассел Сілва

Ці інструкції застарілі . Ви можете розглянути можливість їх оновлення.
Плоні

11

Зі gnome-exe-thumbnailerсценарію, запропонованого Скоттом Річі:

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

витягує інформацію про версію, друкуючи деякі двійкові дані, змішані з текстом UTF-16. Сценарій перетворює його в читаний текст, пропускаючи його через:

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'

Загальна команда тоді 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 wrestoolнадається icoutilпакетом, який доступний як стандартний пакунок Debian з моменту повернення.
трійчатка

ви можете зробити це простішим, просто труби його через| hexdump -C
Tomofumi

У Ubuntu 18.04 він знаходиться всередині icoutilsпакета.
Bjorn Reppen

6

Як альтернатива використанню tr і sed для аналізу результатів рішення @ механічного равлика, ось рядок GNU і GNU grep версія:

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

FileVersion
Release 0.65
ProductVersion
Release 0.65

ОНОВЛЕННЯ:

Інша альтернатива - це нещодавня версія exiftool від Phil Harvey (вона заснована на perl, простий в установці на Linux, якщо у вашому дистрибутиві немає, також доступний для Mac та Windows). У ньому багато варіантів форматування.

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

File Version                    : Release 0.67
Product Version                 : Release 0.67

Який пакет у Ubuntu / Debian має exiftool? Схоже libimage-exiftool-perl?
Xen2050

Я просто завантажую вихідний код і будую його локально. Завантажте файл tar.gz з веб-сайту (посилання "Завантажити версію xx.yy" у верхній частині owl.phy.queensu.ca/~phil/exiftool ), витягніть файли та перегляньте розділ ВСТАНОВКА файлу README для як створити його за допомогою perl, а потім встановити його в / usr / local / bin
dcg

4

Якщо ви встановите gnome-exe-thumbnailerпакет, ви можете просто подивитися номер версії в nautilus.

Код для цього вручну доступний в /usr/bin/gnome-exe-thumbnailer.sh


@Scott .. Дякую. він працює .. відповідний код дуже простий у використанні в іншому скрипті ... Я припускаю, що те, що ви маєте на увазі під "ви можете просто подивитися номер версії в nautilus" , це те, що номер версії видається прищепленим до .exe піктограму в Наутілусі .. цікава ідея .. Особисто я дуже рідко використовую перегляд іконок, але фрагмент коду для мене чудово підходить ..
Peter.O

-1

Я щойно дізнався про те, як створити приємний диктон пітона з інформацією (я чомусь озирався і завершився тут) і хотів би представити тут свій метод:
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)

Я ліцензую його під Ліцензією MIT ... може кожен, хто відчуває потребу в створенні корисних сценаріїв або інших речей з ним ...

І дивіться Github Gists - spookyahell / peinfo.py для прикладу реалізації цього методу в іншому сценарії ...


Ласкаво просимо до Ask Ubuntu! Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Кевін Боуен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.