Как просмотреть информацию о версии файла PE EXE / DLL?


31

В Windows есть страница с информацией о версии в окне свойств исполняемого файла / библиотеки. Как просмотреть эту информацию в Ubuntu?


2
Вы имеете в виду, как просматривать такую ​​информацию из бинарных файлов / библиотек Linux или окон 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
@ Иван, вы можете вместо этого принять этот ответ.
Рассел Сильва

Эти инструкции устарели . Вы можете рассмотреть возможность их обновления.
Плони

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 с тех пор.
tripleee

Вы можете сделать это проще, просто | hexdump -C
протолкнув

В Ubuntu 18.04 он находится внутри icoutilsпакета.
Бьорн Реппен

6

В качестве альтернативы использованию tr и sed для анализа выходных данных решения @ mechanical-snail, есть строки 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


@ Скотт .. Спасибо. это работает .. соответствующий код очень просто использовать в другом скрипте ... Я предполагаю, что вы подразумеваете под "вы можете просто посмотреть номер версии в nautilus" , это то, что номер версии появляется привитым в .exe иконка в Наутилусе .. интересная идея .. Лично я редко использую иконку-вид, но фрагмент кода мне очень
подходит

-1

Я только что сам узнал, как создать хороший python dict с информацией (я смотрел вокруг себя и оказался здесь по какой-то причине) и хотел бы представить свой метод здесь:
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 для примера реализации этого метода в другом скрипте ...


Добро пожаловать в Спросите Ubuntu! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Кевин Боуэн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.