ImageBase + SizeOfHeaders将跳转到section表

时间:2012-03-06 19:45:27

标签: windows assembly portable-executable

我正在阅读关于PE的教程,它说

  

通过将ImageBase添加到SizeOfHeaders

来转到节表

但是SizeOfHeaders是

  

所有标题的大小+节表

所以,如果我们将SizeOfHeaders添加到ImageBase,我们不会跳到这些部分而不是表格吗?

2 个答案:

答案 0 :(得分:2)

SizeOfHeaders不用于查找节表的位置,即使它们在某些文件中可能匹配(但我不希望这样)。

以下是在Windows标头(以及系统加载程序)中完成的操作:

#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)        \
    ((ULONG_PTR)(ntheader) +                                            \
     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 \
     ((ntheader))->FileHeader.SizeOfOptionalHeader   \
    ))

请注意,未检查SizeOfOptionalHeader的实际值;它可能非常大甚至是负面的 - 一些恶意软件使用它来欺骗分析工具。

请参阅here了解更多详情,甚至是更糟糕的技巧。

答案 1 :(得分:1)

SizeOfHeaders确实是整个标题的大小,包括DOS存根。

要获取节表的地址,首先获取可选标头的地址,然后添加FileHeader.SizeOfOptionalHeader