如何查看PE EXE / DLL文件的版本信息?


31

在Windows中,可执行文件/库文件属性窗口中有一个版本信息页面。如何在Ubuntu中查看该信息?


2
您是说如何使用Linux实用程序从Linux二进制文件/库或Windows EXE / DLL中查看此类信息?
若奥·平托

1
正如我在问题标题中明确指定的那样,我的意思是PE(Windows)EXE和DLL文件(当然要使用Linux实用程序进行查看)。
伊凡

Answers:



29

我正在使用一种名为pev的工具来在命令行上检索有关PE文件的信息。

可以使用以下-p选项获取文件版本:

pev -p program.exe

pev在Ubuntu pev软件包中可用。


3
@Ivan,您可以考虑接受此答案。
罗素席尔瓦

这些说明已过时。您可能希望考虑更新它们。
Ploni

11

gnome-exe-thumbnailer脚本中,由Scott Ritchie建议:

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'


软件包wrestool提供了+1 icoutil,从此以后就可以作为标准Debian软件包使用。
2014年

您可以通过将其通过管道来简化操作| hexdump -C
Tomofumi

在Ubuntu 18.04中,它位于icoutils软件包中。
比约恩·雷彭

6

作为使用trsed解析@ 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

更新:

另一个选择是Phil Harvey 的exiftool的最新版本(它基于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

我只是下载源代码并在本地构建它。从网站(在顶部的“下载版本XX.YY”链接,下载tar.gz文件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文件中在Nautilus ..一个有趣的想法..图标就个人而言,我很少使用的图标视图,但代码段对我来说是伟大的..
Peter.O

-1

我刚刚发现自己如何使用该信息创建一个不错的python字典(我一直在四处张望,由于某种原因在这里受伤),并想在这里展示我的方法:
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!虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
凯文·鲍文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.