定位区块表(Section Table)
首先我们要知道,区段表是紧接在IMAGE_NT_HEADERS的后面的,如果我们找到了IMAGE_NT_HEADERS的地址,然后再加上IMAGE_NT_HEADERS的大小,是不是就找到了Section Table的地址了呢。知道了这个好开心
微软在WinNT.h中提供了一个宏定义——IMAGE_FIRST_SECTION,用来定位区块表的
它的具体实现如下
// IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.
#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \
((ULONG_PTR)(ntheader) + \
FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
((ntheader))->FileHeader.SizeOfOptionalHeader \
))
由这个宏的定义我们可以看出来,其实区段表是3部分的和。
1、IMAGE_NT_HEADERS的起始地址
2、IMAGE_OPT