Làm cách nào để xem thông tin phiên bản tệp PE EXE / DLL?


31

Trong Windows có một trang thông tin phiên bản trong cửa sổ thuộc tính tệp thực thi / thư viện. Làm thế nào để xem thông tin đó trong Ubuntu?


2
Bạn có nghĩa là làm thế nào để xem thông tin đó từ nhị phân / thư viện Linux hoặc windows EXE / DLL bằng tiện ích Linux?
João Pinto

1
Như tôi đã chỉ định rõ ràng trong tiêu đề câu hỏi, ý tôi là các tệp EXE và DLL của PE (Windows) (để xem bằng cách sử dụng tiện ích Linux).
Ivan

Câu trả lời:


-1

Bạn có thể cần phải cài đặt trình xem tệp PE của bên thứ ba, chẳng hạn như http://www.ucware.com/apev/index.htm


Không có công cụ gốc Linux cho việc này sao?
Ivan


7
$ 25 cho một người xem thông tin tập tin? Nghiêm túc?
Ốc cơ khí

5
Lưu ý cho khách truy cập sau ngày 5 tháng 4 năm 2013: Phần mềm này dường như đã bị ngừng và không còn có sẵn từ nhà phát triển.
Moshe Katz

29

Tôi đang làm việc trong một công cụ gọi là pev để lấy thông tin về các tệp PE trên dòng lệnh.

Phiên bản tệp có thể được tìm nạp với -ptùy chọn:

pev -p program.exe

pev có sẵn trên Ubuntu trong pevgói .


3
@Ivan bạn có thể cân nhắc chấp nhận câu trả lời này thay vào đó.
Russell Silva

Các hướng dẫn này đã lỗi thời . Bạn có thể muốn xem xét cập nhật chúng.
Ploni

11

Từ gnome-exe-thumbnailerkịch bản, được đề xuất bởi Scott Ritchie:

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

trích xuất thông tin phiên bản, in một số dữ liệu nhị phân trộn với văn bản UTF-16. Kịch bản chuyển đổi nó thành văn bản có thể đọc được bằng cách chuyển nó qua:

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'

Lệnh tổng thể là sau đó 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được cung cấp bởi icoutilgói có sẵn dưới dạng gói Debian tiêu chuẩn kể từ khi quay trở lại.
tripleee

bạn có thể làm cho nó đơn giản hơn bằng cách chuyển nó qua| hexdump -C
Tomofumi

Trong Ubuntu 18.04, nó nằm trong icoutilsgói.
Bjorn Reppen

6

Thay thế cho việc sử dụng trsed để phân tích đầu ra từ giải pháp của @ Mechanical-snail, đây là một chuỗi GNU và phiên bản GNU grep :

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

FileVersion
Release 0.65
ProductVersion
Release 0.65

CẬP NHẬT:

Một lựa chọn khác là một phiên bản exiftool gần đây của Phil Harvey (nó dựa trên perl, dễ cài đặt trên Linux nếu bản phân phối của bạn không có nó, cũng có sẵn cho Mac và Windows). Nó có rất nhiều tùy chọn định dạng.

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

File Version                    : Release 0.67
Product Version                 : Release 0.67

Gói nào trong Ubuntu / Debian có exiftool? Hình như thế libimage-exiftool-perlnào?
Xen2050

Tôi chỉ cần tải mã nguồn và xây dựng nó cục bộ. Tải xuống tệp tar.gz từ trang web (Liên kết "Tải xuống phiên bản xx.yy" ở đầu trang Owl.phy.queensu.ca/~phil/exiftool ), giải nén các tệp và xem phần CÀI ĐẶT của tệp README cho Cách xây dựng nó bằng perl và sau đó cài đặt nó vào / usr / local / bin
dcg

4

Nếu bạn cài đặt gnome-exe-thumbnailergói, bạn chỉ cần nhìn vào số phiên bản trong nautilus.

Mã để làm điều này bằng tay có sẵn trong /usr/bin/gnome-exe-thumbnailer.sh


@ Hủy bỏ .. Cảm ơn. nó hoạt động .. mã có liên quan rất đơn giản để sử dụng trong tập lệnh khác ... Tôi giả sử rằng ý của bạn là "bạn có thể chỉ cần nhìn vào số phiên bản trong nautilus" , là số phiên bản được ghép vào .exe biểu tượng trong Nautilus .. một ý tưởng thú vị .. Cá nhân tôi hiếm khi sử dụng chế độ xem biểu tượng, nhưng đoạn mã rất phù hợp với tôi ..
Peter.O

-1

Tôi chỉ tìm ra cách tạo ra một con trăn đẹp với thông tin (tôi đang tìm kiếm xung quanh và tìm kiếm ở đây vì lý do nào đó) và muốn trình bày phương pháp của tôi ở đây:
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)

Tôi đang cấp phép cho nó theo Giấy phép MIT ... có thể bất kỳ ai cảm thấy cần phải tạo các tập lệnh hữu ích hoặc những thứ khác với nó ...

Và xem Github Gists - spookyahell / peinfo.py để biết ví dụ về cách thực hiện phương pháp này trong một tập lệnh khác ...


Chào mừng bạn đến hỏi Ubuntu! Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Kevin Bowen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.