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

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

 2007-01-14 20:15:21 来源:WEB开发网   
核心提示: 现在输入已经被用正确的线性地址修正,如下所示:原始第一个换长第一个换长||||||VV0-->函数10-->输出函数11-->函数21-->输出函数22-->函数32-->输出函数33-->foo3-->输出函数foo4-->mumpi

现在输入已经被用正确的线性地址修正,如下所示:

   原始第一个换长    第一个换长
      |          |
      |          |
      |          |
      V          V
      0-->  函数1    0--> 输出函数1
      1-->  函数2    1--> 输出函数2
      2-->  函数3    2--> 输出函数3
      3-->  foo     3--> 输出函数foo
      4-->  mumpitz   4--> 输出函数mumpitz
      5-->  knuff    5--> 输出函数knuff
      6-->0      0<--6

这是简单情况下的基本结构。现在我们将要学习输入目录中的需细讲的东西。

第一,当数组中IMAGE_THUNK_DATA元(换长数据)素的IMAGE_ORDINAL_FLAG(序数标志)位(也是:MSB,参见注释)被置1时,表示列表中没有符号的名字信息,符号只以序数输入。你可通过查看IMAGE_THUNK_DATA(换长数据)中的低地址word来得到序数。

通过序数输入是不鼓励的,通过名字输入会更安全,因为如果输出DLL文件不是预期的版本时输出序数可能会改变。

第二,有所谓的“绑定输入”。

请思考一下加载器的工作:当它想执行的一个二进制文件需要一个DLL中的函数时,加载器会载入该DLL,找到它的输出目录,查找函数的RVA并计算函数的入口点。然后用这样找到的地址修正“FirstThunk”(第一个换长)列表。

假设程序员很聪明,给DLL文件提供的唯一优先载入地址不会发生冲突,那么我们就能认为函数的入口点将总是相同的。它们在链接时能被算出并被补进“FirstThunk”(第一个换长)列表中,这就是“绑定输入”所发生的一切。(“绑定”工具就是干这个的,它是Win32SDK的一部分。)      

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

Tags:PE 文件 格式

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