WEB开发网
开发学院网络安全黑客技术 “PE文件格式”1.9版 完整译文(附注释)(2) 阅读

“PE文件格式”1.9版 完整译文(附注释)(2)

 2007-01-14 20:15:21 来源:WEB开发网   
核心提示: 这就是所谓的“老式”绑定,至此,“PE文件格式”1.9版 完整译文(附注释)(2)(4),我们应该总结一下我们目前已掌握的情况:-)OK,我将认为你已找到了IMAGE_DIRECTORY_ENTRY_IMPORT(输入目录项)并且已根据它找到了它的输入目录,我已发现

这就是所谓的“老式”绑定。

至此,我们应该总结一下我们目前已掌握的情况:-)

OK,我将认为你已找到了IMAGE_DIRECTORY_ENTRY_IMPORT(输入目录项)并且已根据它找到了它的输入目录,位于某个节中。现在你已处于IMAGE_IMPORT_DESCRIPTOR(输入描述结构)数组的开头了,此类数组的最后一个将以全0字节填充。

要读懂一个IMAGE_IMPORT_DESCRIPTOR(输入描述结构),你得先查看它的“名字”项,根据它的RVA,你就能找到输出DLL文件的名字。下一步你得确定输入是否是绑定的;如果输入是绑定的,“时间戳”就会是非“0”的。如果它们是绑定的,现在就是你通过比较“时间戳”来检查DLL文件的版本是否相符的好机会了。

现在你根据“OriginalFirstThunk”(原始第一个换长)的RVA来到了IMAGE_THUNK_DATA(换长数据)数组;过完这些数组(它是0结尾的),它的每个成员都将是一个IMAGE_IMPORT_BY_NAME(输入名字)的RVA(除非它的高位被置1,此时你找不到名字只有序数)。根据那个RVA,并跳过2字节(即‘提示’),现在你就得到一个以0结尾的字符串,这就是输入函数的名字。

在绑定输入时要找到提供的入口点,先根据“FirstThunk”(第一个换长)平行的来到“OriginalFirstThunk”(原始第一个换长)数组;数组成员就是入口点的线性地址(暂时不考虑中转的话题)。

还有一件我到现在都没有提及的事情:明显地有些链接器在构建输入目录时会产生bug(我就发现一个还在被一个BorlandC链接器使用的bug)。这些链接器把IMAGE_IMPORT_DESCRIPTOR(输入描述结构)中的“OriginalFirstThunk”(原始第一个换长)设为0,并只建立“FirstThunk”(第一个换长)。很明显的,这样的输入目录不能被绑定(否则重修输入的必须信息就会丢失----你根本找不到函数名字)。在这种情况下,你得根据“FirstThunk”(第一个换长)数组来取得输入符号名字,你将永远得不到预先补正的入口地址。我已发现一个TIS文件(参考书目[6]),讲述一个在某种程度上和此bug兼容的输入目录,因此那个文件可能就是该bug的起源。

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:PE 文件 格式

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接