Windows似乎通常通过查看标头信息(尤其是OptionalHeader.DataDirectory [])来在PE内部找到其支持结构,这意味着这些数据块与某些COFF部分之间没有强制性的映射(即使它是习惯性的,与.rsrc一样)。结果,当可执行文件被打包程序,“保护器”或类似的东西破坏后,COFF部分及其名称往往遍布各处。

但是,Windows似乎确定了位置和位置。 .pdata COFF节标题通过.pdata的大小(RUNTIME_FUNCTION的数组)。这是正确的吗?

这将使本节独特,因为即使是最精明的“保护者”也必须以正确的名称发出准确的信息,或者动态地注册该信息...

#1 楼

不,Windows加载器不关心.pdata部分的名称。它不会根据节名称找到RUNTIME_FUNCTION结构,而是根据NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION]的内容找到。

此外,RUNTIME_FUNCTION结构不必位于“单独的COFF节”中。

评论


谢谢,以某种方式我错过了x86 PE曾经为空的异常表。似乎在PE COFF规范的v8中记录了此表的x64使用。 MSDN当前具有可供下载的版本8.3(pecoff_v83.docx)。无论如何,再次感谢!我应该更仔细地查看标题信息。

– DarthGizka
2014年12月20日15:34