我想在 Perl 中使用 PE 文件但没有找到模块,所以我想我会自己编写(已经在 delphi 中做过一次)。
我只有一个问题,当将可执行文件映射到缓冲区时,我如何搜索像 0x00004550 (IMAGE_NT_SIGNATURE) 这样的八进制数,将它们转换回可写字符串等?
我想在 Perl 中使用 PE 文件但没有找到模块,所以我想我会自己编写(已经在 delphi 中做过一次)。
我只有一个问题,当将可执行文件映射到缓冲区时,我如何搜索像 0x00004550 (IMAGE_NT_SIGNATURE) 这样的八进制数,将它们转换回可写字符串等?
有一个Perl 模块来操作可移植的可执行文件: Win32::Exe
.
我不知道您的确切问题,但如果您仍想编写自己的库,Win32::Exe
可能是一个很好的参考。
要将该值转换为字节串表示,请使用pack
. 您正在处理的常量是一个 little-endian 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
可能值得一看,这取决于你想做什么。)