Como eu posso ler os cabeçalhos de uma WinNT portátil arquivo executável usando Perl?
-
07-07-2019 - |
Pergunta
Eu quero trabalhar com arquivos PE) em Perl e não encontrar um módulo, então eu acho que eu vou escrever a minha própria (já fiz isso em delphi, uma vez).
Eu só tenho um problema, quando o mapeamento executável para um buffer, como posso pesquisar octals como 0x00004550 (IMAGE_NT_SIGNATURE), convertê-los de volta para gravável de cadeias de caracteres, etc.?
Solução
Lá é um módulo Perl para manipular portátil executáveis: Win32::Exe
.
Eu não tenho a menor idéia sobre sua pergunta exata, mas se você ainda quer escrever sua própria biblioteca, Win32::Exe
pode ser uma boa referência.
Outras dicas
Para converter esse valor em uma representação bytestring, use pack
. A constante que você está lidando é um valor pouco endiano de 32 bits, então 'V' no modelo.
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
Ver perldoc -f pack
para detalhes.
Você provavelmente não precisará procurar strings como "pe 0 0", basta usá -las para verificar se o arquivo que você está lendo realmente é um arquivo PE. A seção 'PE' geralmente vem logo após a seção DOS ('MZ'), que tem seu próprio campo de comprimento.
(Eu concordo que Win32::Exe
Pode valer a pena dar uma olhada, dependendo do que você deseja fazer.)