我正在阅读关于PE的教程,它说
通过将ImageBase添加到SizeOfHeaders
来转到节表
但是SizeOfHeaders是
所有标题的大小+节表
所以,如果我们将SizeOfHeaders添加到ImageBase,我们不会跳到这些部分而不是表格吗?
答案 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
。