如何使用Perl从WinNT可移植可执行文件中读取标头?
-
07-07-2019 - |
题
我想在Perl中使用PE文件并且没有找到模块,所以我想我会编写自己的(已经在delphi中做过一次)。
我只遇到一个问题,当将可执行文件映射到缓冲区时,如何搜索像0x00004550(IMAGE_NT_SIGNATURE)这样的八进制文件,将它们转换回可写字符串等?
解决方案
是一个用于操作可移植可执行文件的Perl模块: <代码>的Win32 ::埃克代码> 。
我对您的确切问题一无所知,但如果您仍想编写自己的库, Win32 :: Exe
可能是一个很好的参考。
其他提示
要将该值转换为字节字符串表示形式,请使用 pack
。您处理的常量是一个小端32位值,因此模板中的“V”。
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
有关详细信息,请参阅 perldoc -f pack
。
您可能不需要搜索像“PE \ 0 \ 0”这样的字符串,只需使用它们来验证您正在读取的文件是否是PE文件。 'PE'部分通常位于DOS('MZ')部分后面,该部分有自己的长度字段。
(我同意 Win32 :: Exe
可能值得一看,具体取决于你想做什么。)
不隶属于 StackOverflow