Как я могу прочитать заголовки из переносимого исполняемого файла WinNT, используя Perl? - PullRequest
0 голосов
/ 14 сентября 2009

Я хочу работать с PE-файлами в Perl и не нашел модуль, поэтому думаю, что напишу свой (уже делал это в Delphi однажды).

У меня только одна проблема: когда я сопоставляю исполняемый файл с буфером, как я могу искать восьмеричные числа, например 0x00004550 (IMAGE_NT_SIGNATURE), преобразовывать их обратно в записываемые строки и т. Д.?

Ответы [ 2 ]

9 голосов
/ 14 сентября 2009

Там - это модуль Perl для управления переносимыми исполняемыми файлами: Win32::Exe.

Я не имею понятия о вашем конкретном вопросе, но если вы все еще хотите написать свою собственную библиотеку, Win32::Exe может быть хорошей справкой.

2 голосов
/ 14 сентября 2009

Для преобразования этого значения в представление строки байтов используйте pack. Константа, с которой вы работаете, является 32-битным значением с прямым порядком байтов, поэтому в шаблоне указано «V».

$ perl -e 'print pack q[V], 0x00004550' | hd
00000000  50 45 00 00                                       |PE..|
00000004

Подробнее см. perldoc -f pack.

Вам, вероятно, не нужно искать строки типа «PE \ 0 \ 0», просто используйте их, чтобы проверить, является ли файл, который вы читаете, на самом деле PE-файлом. Секция 'PE' обычно идет сразу после секции DOS ('MZ'), которая имеет собственное поле длины.

(Я согласен, что Win32::Exe может стоить посмотреть, в зависимости от того, что вы хотите сделать.)

...