PE中一些容易混淆的点

1.DOS头的e_lfanew的偏移值 是指 PE文件开头开始偏移
2.PE装载器根据FILE_HEADER的SizeOfOptionalHeader值来识别OPTONAL_HEADER大小
3.节区头位置 = OPTIONAL_HEADER + SizeOfOptionalHeader
4.SizeOfHeader为PE头的总大小,也是确定第一节区的位置
5.NumberOfRvaAndSizes为PE装载器识别DataDircetory数组大小
6.节区的VirtualSize > SizeOfRawData时候,计算RAW的公式就会出错,这时候就得判断。这个时候在内存中VirtualSize与SectionAlignment对齐之后,从PointerToRawData读取SizeOfRawData的硬盘数据,然后后面全部填充为00
7.重定位表的Typeoffset高4位为0时候表示这个地址不进行重定位
8.删除节区需要更改SizeOfImage,NumberOfSections
9.SizeOfImage = 所有节区VirtualSize按SectionAlignment对齐后 + PE头按SectionAlignment对齐后的总大小
10.PE装载器在发现节区的PointerToRawData不是FileAlignment的整数倍时候,会强制将它识别为整数倍(加入FileAlignment = 200 , 则10识别为0,210识别为200 ---> PointerToRawData / FileAlignment * FileAlignment)

11.PE装载器无法根据OriginalFirstThunk找到API名称数组时候就会尝试用FirstThunk查找
12.PE装载器根据IID的结尾00来判断IID结尾而不是根据IDT的Size / 0x14 - 1来判断结尾

猜你喜欢

转载自blog.csdn.net/a893574301/article/details/81558388