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

PE文件格式(2)

 2007-01-14 20:15:04 来源:WEB开发网   
核心提示: 下面是指向其成员为指向符号名的32位RVA的数组'AddressOfNames',和一个指向16位序数的数组的32位RVAAddressOfNameOrdinals'.两个数组都含有'NumberOfNames'个元素.符号名可能全部丢失,所以

下面是指向其成员为指向符号名的32位RVA的数组'AddressOfNames',和一个指向16位序数的数组的32位RVAAddressOfNameOrdinals'.两个数组都含有'NumberOfNames'个元素.符号名可能全部丢失,所以'AddressOfNames'是0.否则被指向的数组并行运行,'AddressOfNames'数组包含指向0结尾的输出名的RVAs。名字都按照字母顺序保存,便于高效检索名字。根据PE规范,AddressOfNameOrdinals数组含有相应名字的序数,但实际上含有AddressOfFunctions数组的索引。序数=BASE+INDEX。

上述3表的示意图:

  AddressOfFunctions 函数地址指向一个地址数组
     |
     |
     v
  exportedRVAwithordinal'Base' //带有序号的输出函数的RVA
  exportedRVAwithordinal'Base'+1
  ...
  exportedRVAwithordinal'Base'+'NumberOfFunctions'-1
  AddressOfNames         AddressOfNameOrdinals
     |               |
     |               |
     v               v
  RVAtofirstname     <->Indexofexportforfirstname
  RVAtosecondname     <->Indexofexportforsecondname
  ...              ...
  RVAtoname'NumberOfNames'<->Indexofexportforname'NumberOfNames'

名字地址指向名字RVA数组        “名字序数地址”指向名字序数数组

要按照序数找出输出符号:减去'Base'得到索引,跟随AddressOfFunctionsRVA找到输出数组,用索引定位输出符号RVA所在元素。如果没有指向输出节,你就完成任务了。否则,如果指向一个描述输出DLL名字和序数的串,你必须查找被转发的输出项。

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

Tags:PE 文件 格式

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