Comment lire les en-têtes d'un fichier exécutable portable WinNT à l'aide de Perl?

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

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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top