WEB开发网
开发学院网络安全黑客技术 PE文件格式(2) 阅读

PE文件格式(2)

 2007-01-14 20:15:04 来源:WEB开发网   
核心提示: TimeDateStamp32位时间戳,ForwarderChain输入函数第一个转发链的32位索引Name指向DLL名字的32位RVA,PE文件格式(2)(9),FirstThunk指向IMAGE_THUNK_DATAs数组的32位RVA,它是输入地址表的一部分,或者其他任意数字,只是导

TimeDateStamp 32位时间戳。

ForwarderChain输入函数第一个转发链的32位索引

Name指向DLL名字的32位RVA。    

FirstThunk指向IMAGE_THUNK_DATAs数组的32位RVA,它是输入地址表的一部分,将发生变化。Thunk的意思就是查找,虚实变换的意思。

IMAGE_THUNK_DATA32STRUCT
  unionu1
    ForwarderStringdd ?
    Functiondd    ?
    Ordinaldd     ?
    AddressOfDatadd  ?
  ends
IMAGE_THUNK_DATA32ENDS
以下是VC98,WINNT.h内的定义:
typedefstruct_IMAGE_THUNK_DATA64{
  union{
    PBYTE ForwarderString;
    PDWORDFunction;
    ULONGLONGOrdinal;
    PIMAGE_IMPORT_BY_NAME AddressOfData;
  }u1;
}IMAGE_THUNK_DATA64;
typedefIMAGE_THUNK_DATA64*PIMAGE_THUNK_DATA64;

于是每个IMAGE_IMPORT_DESCRIPTOR成员给出输出DLL的名字,2个RVAs指向IMAGE_THUNK_DATAs数组,数组的最后一个成员全部填充0表示结束。每个IMAGE_THUNK_DATA成员有一个指向IMAGE_IMPORT_BY_NAME的RVA,用以描述输入函数。有趣的是这些数组并行运行,他们指向相同的

IMAGE_IMPORT_BY_NAMEs(按名输入).

这是IMAGE_IMPORT_DESCRIPTOR必须的内容:

  OriginalFirstThunk   FirstThunk
      |          |
      |          |
      |          |
      V          V
      0-->  func1  <--0
      1-->  func2  <--1
      2-->  func3  <--2
      3-->  foo   <--3
      4-->  mumpitz <--4
      5-->  knuff  <--5
      6-->0      0<--6   /*最后的RVA是0*/
IMAGE_IMPORT_BY_NAMESTRUCT
  Hintdw  ?
  Name1db  ?
IMAGE_IMPORT_BY_NAMEENDS

中间的名字是要讨论的IMAGE_IMPORT_BY_NAMEs.每个包括一个16位的hint,一个没有确定字节数的name,hint是一个输出DLL函数名字表(见前面输出目录)的索引,索引处的名字被测试,如果不匹配,则用二进制搜索来找到名字。有的链接器只是简单置1,或者其他任意数字。只是导致第一次搜索企图失败,然后强迫使用二进制搜索名字。

上一页  4 5 6 7 8 9 10  下一页

Tags:PE 文件 格式

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