Como eu posso ler os cabeçalhos de uma WinNT portátil arquivo executável usando Perl?

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

  •  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.?

Foi útil?

Solução

é 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.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top