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

来源: 作者: 2007-10-24 出处:pcdog.com

dos  
下一页 1 2 3 4 5 6 7 

  正如你所见,我计划只用2个节,一个用于代码,一个用于所有剩余的东西(数据、常量和输入目录等)。没有重定位和象资源之类其它东西。我也不用BSS节并将变量“written”放入已初始化数据。

文件和RAM中的节对齐都是一样的(32字节);这将有助于使任务简单,否则我就得来回地计算RVA很多次。

  现在我们设置数据目录,开始于0xb8字节,有0x80字节长:

   地址     大小
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_EXPORT(0)
  ????????  ????????    ;IMAGE_DIRECTORY_ENTRY_IMPORT(1)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_RESOURCE(2)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_EXCEPTION(3)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_SECURITY(4)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_BASERELOC(5)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_DEBUG(6)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_COPYRIGHT(7)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_GLOBALPTR(8)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_TLS(9)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG(10)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT(11)
  00000000  00000000    ;IMAGE_DIRECTORY_ENTRY_IAT(12)
  00000000  00000000    ;13
  00000000  00000000    ;14
  00000000  00000000    ;15

  仅使用输入目录。

  下一个使节头。首先我们做代码节的,代码节将包含前面所编的汇编语句。它有32字节长,所以代码节也就是这么长。节头从0x138处开始,有0x28字节长:

  Name      2e636f6465000000  ;".code"的ASCII码值
  VirtualSize    00000000      ;未用
  VirtualAddress   ????????      ;待定
  SizeOfRawData   20000000      ;代码的大小
  PointerToRawData  ????????      ;待定
  PointerToRelocations00000000      ;未用
  PointerToLinenumbers00000000      ;未用
  NumberOfRelocations 0000         ;未用
  NumberOfLinenumbers 0000         ;未用
  Characteristics  20000060      ;代码节,可执行,可读

  第二节将包含数据。节头开始于0x160处,有0x28字节长:



下一页 1 2 3 4 5 6 7 
上一篇:“PE文件格式”1.9版 完整译文(附注释)(4)
下一篇:“PE文件格式”1.9版 完整译文(附注释)(2)