我想在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 可能值得一看,具体取决于你想做什么。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top