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