我想在Perl与PE文件的工作,并没有找到一个模块,所以我想我会写我自己的(已经做了,在德尔福一次)。
我只有一个问题,映射可执行文件的缓冲区,我如何可以搜索像0x00004550(IMAGE_NT_SIGNATURE)八进制时,将其转换回写串等?
我想在Perl与PE文件的工作,并没有找到一个模块,所以我想我会写我自己的(已经做了,在德尔福一次)。
我只有一个问题,映射可执行文件的缓冲区,我如何可以搜索像0x00004550(IMAGE_NT_SIGNATURE)八进制时,将其转换回写串等?
有一个Perl模块来操控便携式可执行文件: Win32::Exe
。
我没有对你的问题相关的线索,但如果你仍然想编写自己的库, 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
可能是值得一看,这取决于你想要做什么。)