misc 是节在内存中的真实大小(而并非是文件中的),所以有可能会出现misc>SizeofRawData的情况
原因是节在文件中,有很多未初始化的数据,到了内存后,这些数据是需要给空间的。
拉伸后的大小在可选头SizeofImage中.
拉伸步骤:
1.读SizeofImage 对应的申请内存,初始化为0
2.拷贝头们+节表 大小为(SizeofHeaders)
3.拷贝节区,PointerToRawData决定从文件哪个位置拷贝.(偏移,因为是0开始的,所以也是实际地址)
VirtualAddress决定拷贝到内存什么地址(偏移,距离申请内存开始的地方的偏移).
SizeofRawData决定拷贝多大,
不能用Misc的值去拷贝(万一比SizeofRawData大 那么就会拷贝到下个节区的数据)
注意:拉伸时,虚拟内存缓冲区的开始地址和ImageBase没有关系(仅仅是拉伸到自己申请的内存)
必备练习:
计算在虚拟