¿Cómo puedo leer los encabezados de un archivo ejecutable portátil WinNT usando Perl?
-
07-07-2019 - |
Pregunta
Quiero trabajar con archivos PE en Perl y no encontré un módulo, así que creo que escribiré el mío (ya lo hice en Delphi una vez).
Solo tengo un problema, al asignar el ejecutable a un búfer, ¿cómo puedo buscar octales como 0x00004550 (IMAGE_NT_SIGNATURE), convertirlos nuevamente en cadenas grabables, etc.?
Solución
Hay hay un módulo Perl para manipular ejecutables portátiles: < code> Win32 :: Exe .
No tengo ni idea de su pregunta exacta, pero si aún desea escribir su propia biblioteca, Win32 :: Exe
podría ser una buena referencia.
Otros consejos
Para convertir ese valor en una representación de cadena de bytes, use pack
. La constante que está tratando es un valor little-endian de 32 bits, entonces 'V' en la plantilla.
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
Ver perldoc -f pack
para más detalles.
Probablemente no necesite buscar cadenas como " PE \ 0 \ 0 " ;, solo úselas para verificar si el archivo que está leyendo es realmente un archivo PE. La sección 'PE' generalmente viene justo después de la sección DOS ('MZ') que tiene su propio campo de longitud.
(Estoy de acuerdo en que Win32 :: Exe
puede valer la pena, dependiendo de lo que quieras hacer).