Comment lire les en-têtes d'un fichier exécutable portable WinNT à l'aide de Perl?
-
07-07-2019 - |
Question
Je veux travailler avec des fichiers PE dans Perl et je n'ai pas trouvé de module. Je pense donc écrire le mien (je l'avais déjà fait une fois dans Delphi).
Je n'ai qu'un seul problème: comment mapper l'exécutable sur un tampon, comment puis-je rechercher des octaux comme 0x00004550 (IMAGE_NT_SIGNATURE), les reconvertir en chaînes inscriptibles, etc.?
La solution
Il existe un module Perl permettant de manipuler des exécutables portables: < code> Win32 :: Exe .
Je n'ai pas la moindre idée de votre question exacte, mais si vous souhaitez toujours écrire votre propre bibliothèque, Win32 :: Exe
peut constituer une bonne référence.
Autres conseils
Pour convertir cette valeur en une représentation bytestring, utilisez pack
. La constante que vous utilisez est une valeur 32 bits little-endian, donc "V" dans le modèle.
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
Voir perldoc -f pack
pour plus de détails.
Vous n’aurez probablement pas besoin de rechercher des chaînes telles que "PE \ 0 \ 0", utilisez-les simplement pour vérifier si le fichier que vous lisez est bien un fichier PE. La section "PE" vient généralement juste après la section DOS ("MZ") qui possède son propre champ de longueur.
(Je conviens que Win32 :: Exe
peut valoir le détour, selon ce que vous souhaitez faire.)