Как я могу прочитать заголовки из переносимого исполняемого файла WinNT, используя Perl?

StackOverflow https://stackoverflow.com/questions/1418855

  •  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 может стоить посмотреть, в зависимости от того, что вы хотите сделать.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top