0

我想在 Perl 中使用 PE 文件但没有找到模块,所以我想我会自己编写(已经在 delphi 中做过一次)。

我只有一个问题,当将可执行文件映射到缓冲区时,我如何搜索像 0x00004550 (IMAGE_NT_SIGNATURE) 这样的八进制数,将它们转换回可写字符串等?

4

2 回答 2

9

一个Perl 模块来操作可移植的可执行文件: Win32::Exe.

我不知道您的确切问题,但如果您仍想编写自己的库,Win32::Exe可能是一个很好的参考。

于 2009-09-13T21:23:00.240 回答
2

要将该值转换为字节串表示,请使用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可能值得一看,这取决于你想做什么。)

于 2009-09-14T07:52:50.517 回答