Как я могу прочитать заголовки из переносимого исполняемого файла WinNT, используя Perl?
-
07-07-2019 - |
Вопрос
Я хочу работать с PE-файлами в Perl и не нашел модуль, поэтому думаю, что напишу свой (уже делал это в Delphi однажды).
У меня только одна проблема: когда я сопоставляю исполняемый файл с буфером, как я могу искать восьмеричные числа, например 0x00004550 (IMAGE_NT_SIGNATURE), преобразовывать их обратно в записываемые строки и т. д.?
Решение
есть модуль Perl для управления переносимыми исполняемыми файлами: < код> Win32 :: Exe код> .
Я не имею понятия о вашем конкретном вопросе, но если вы все еще хотите написать свою собственную библиотеку, Win32 :: Exe
может быть хорошим справочным материалом.
Другие советы
Для преобразования этого значения в представление строки байтов используйте 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
может стоить посмотреть, в зависимости от того, что вы хотите сделать.)