LinuxForum.Fans
Тема

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

Автор: VladVons 15 сообщений 6702 просмотров
#94561

Нужно из под Linux (без Wine) вытащить с Windows EXE/DLL файла такую информацию:
CompanyName
FileVersion
ProductVersion

Из под Windws используя API функции это сделать не сложно
GetFileVersionInfoSize()
GetFileVersionInfo()
итд.

#94576
VladVons написал:
Нужно из под Linux (без Wine) вытащить с Windows EXE/DLL файла такую информацию:

команда file не даёт? тогда никак. разве что самому писать.

#94765

может на cpan.org найдете модуль для добычи данной информации?
правда вам надо будет еще уметь на perl написать программу использующую данный модуль.

#95406

утилита "file" выдает только короткое описание о файле.
-notepad.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
-img627.jpg: JPEG image data, JFIF standard 1.01

Нашел "objdump".
Дает много информации, но нужной мне - нет.

#95606
VladVons написал:
утилита "file" выдает только короткое описание о файле.

дайте ссылочку на формат PE, а то я уже и не помню... Конвертор написать достаточно просто, например используя sed.

#95843

исполняемый файл в виндовсе это EXE
http://en.wikipedia.org/wiki/Portable_Executable

Например редактор DBF файлов под Виндовс http://www.jdv-soft.com/User/File/DBFView/Download/DBFView.zip
В архиве есть инсталятор: JDV-DBFView-Setup-283.exe

исполняемый файл в линуксе это ELF
http://en.wikipedia.org/wiki/Executable_and_Linkable_Format

#95868

э... это здесь читать надо:
http://kishorekumar.net/pecoff_v8.1.htm
ИМХО проще на C реализовать программку, чем sed|perl мучить. Запутанный формат, это изучать его надо...

#95960

ага, и я о том же :)
надо будет самому разбираться.

Напишу парсер - выложу.

#96008

Есть еще модуль для PERL, но при установке (cpan Win32::File::VersionInfo) на Linux выдает ошибку:

куча текста...Make had returned bad status, install seems impossible

Возможно он ставится только под Win32 платформу и использует Windows API

#141763

Есть еще другой модуль для PERL (cpan Win32::Exe)

В нем много всего, в том числе и версию файла можно узнать. Правда, для больших файлов медленно работает.

Пример:

text

use Win32::Exe;
my $exe = Win32::Exe->new('C:\windows\notepad.exe');

# Get version information print $exe->version_info->get('FileVersion'), "\n";

#141787

я вот ещё что подумал: можно стянуть с мысы их компилятор (для студентов вроде бесплатно), написать приложение под WinAPI (там одна функция нужна ЕМНИП), и запустить его под wine - последняя реализует эту функцию, которая и вернёт значения. Ну и эти значения достаточно выдать в stdout в человеческом виде.

#141815

Можно позаимствовать идеи/реализацию из wine/dlls/version/, но с этим уже, наверное, в Программирование.
Не исключено, что подобное уже кто-то делал.

#141821
VladVons написал:
Из под Windws используя API функции это сделать не сложно
GetFileVersionInfoSize()
GetFileVersionInfo()
bormant написал:
Можно позаимствовать идеи/реализацию из wine/dlls/version/,

вон, тут даже функции указаны. неужели wine их не умеет? Это-же эмулятор WinAPI! ([в сторону]не надо тут кричать, что wine - не эмулятор. Я в курсе. Прочтите до конца фразу - "wine не эмулятор виндовс", а вот WinAPI вполне даже себе эмулирует)

#175033

Вам нужна 2-ая запись (считая с нуля) в Data Directory (директория ресурсов).
Я не изучал ее формат - проще копнуть исходники wine или любой утилиты просмотра PE-формата (biew, HTEditor).

Хотя зачем что-то писать? Можно установить hex-редактор и пользоваться им.

#178291
AndreyMust19 написал:
Можно установить hex-редактор и пользоваться им.

не нужно:
[console]$ xxd -h 2>&1 | xxd -g1
0000000: 55 73 61 67 65 3a 0a 20 20 20 20 20 20 20 78 78 Usage:. xx
0000010: 64 20 5b 6f 70 74 69 6f 6e 73 5d 20 5b 69 6e 66 d [options] [inf
0000020: 69 6c 65 20 5b 6f 75 74 66 69 6c 65 5d 5d 0a 20 ile [outfile]].
0000030: 20 20 20 6f 72 0a 20 20 20 20 20 20 20 78 78 64 or. xxd
...
[/console]
работает вместе с vim как hex-editor

Войдите или зарегистрируйтесь, чтобы ответить.