Como visualizar as informações da versão do arquivo PE EXE / DLL?


31

No Windows, há uma página de informações da versão em uma janela de propriedades do arquivo executável / biblioteca. Como visualizar essas informações no Ubuntu?


2
Você quer dizer como visualizar essas informações de binários / bibliotecas Linux ou EXE / DLL do Windows usando um utilitário Linux?
João Pinto

11
Como especifiquei claramente no título da pergunta, refiro-me aos arquivos EXE e DLL do PE (Windows) (para visualizar, é claro, usando um utilitário Linux).
Ivan

Respostas:


-1

Você provavelmente precisará instalar um visualizador de arquivos PE de terceiros, como http://www.ucware.com/apev/index.htm


Não existe uma ferramenta nativa do Linux para isso?
Ivan


7
US $ 25 para um visualizador de informações de arquivo? A sério?
Caracol mecânico

5
Nota para visitantes após 5 de abril de 2013: este software parece ter sido descontinuado e não está mais disponível no desenvolvedor.
Moshe Katz

29

Estou trabalhando em uma ferramenta chamada pev para recuperar informações sobre arquivos PE na linha de comando.

A versão do arquivo pode ser buscada com a -popção:

pev -p program.exe

O pev está disponível no Ubuntu no pevpacote .


3
@ Ivan, você pode considerar aceitar esta resposta.
Russell Silva

Estas instruções estão desatualizadas . Você pode considerar atualizá-los.
Ploni 28/10/19

11

Do gnome-exe-thumbnailerroteiro, sugerido por Scott Ritchie:

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

extrai as informações da versão, imprimindo alguns dados binários misturados ao texto UTF-16. O script o converte em texto legível, canalizando-o através de:

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'

O comando geral é então 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é fornecido pelo icoutilpacote que está disponível como um pacote Debian padrão desde o início.
Tripleee

você pode torná-lo mais simples, apenas canalizá-lo através| hexdump -C
Tomofumi

No Ubuntu 18.04 está dentro do icoutilspacote.
Bjorn Reppen

6

Como alternativa ao uso de tr e sed para analisar a saída da solução do @ Mechanical-snail, aqui estão as strings GNU e a versão grep do GNU :

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

FileVersion
Release 0.65
ProductVersion
Release 0.65

ATUALIZAR:

Outra alternativa é uma versão recente do exiftool de Phil Harvey (é baseada em perl, fácil de instalar no Linux se a sua distribuição não o possuir, também disponível para Mac e Windows). Tem muitas opções de formatação.

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

File Version                    : Release 0.67
Product Version                 : Release 0.67

Que pacote no Ubuntu / Debian tem exiftool? Parece libimage-exiftool-perl?
Xen2050

Acabei de baixar o código fonte e construí-lo localmente. Faça o download do arquivo tar.gz no site (o link "Download Version xx.yy" na parte superior de owl.phy.queensu.ca/~phil/exiftool ), extraia os arquivos e consulte a seção INSTALAÇÃO do arquivo README para obter mais informações. como construí-lo usando perl e instalando-o em / usr / local / bin
dcg 26/01

4

Se você instalar o gnome-exe-thumbnailerpacote, poderá simplesmente olhar o número da versão em nautilus.

O código para fazer isso manualmente está disponível em /usr/bin/gnome-exe-thumbnailer.sh


@ Scott .. Obrigado. funciona .. o código relevante é muito simples de usar em outro script ... Suponho que o que você quer dizer com "você pode simplesmente olhar o número da versão no nautilus" , é que o número da versão aparece enxertado no arquivo .exe ícone na Nautilus .. uma idéia interessante .. Pessoalmente, eu raramente usar o ícone-view, mas o trecho de código é ótimo para mim ..
Peter.O

-1

Acabei de descobrir como criar um bom dict python com as informações (eu estava olhando em torno de mim e acabei aqui por algum motivo) e gostaria de apresentar meu método aqui:
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)

Estou licenciando-o sob a licença MIT ... pode alguém que sinta necessidade de criar scripts úteis ou outras coisas com ele ...

E veja Github Gists - spookyahell / peinfo.py para obter um exemplo de implementação desse método em outro script ...


Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Kevin Bowen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.