-
-
[求助]EXE文件和DLL文件创建View时存在差异吗?
-
发表于:
2010-10-23 18:09
3838
-
[求助]EXE文件和DLL文件创建View时存在差异吗?
在写程序的时候发现一个很奇怪的问题,使用函数
CreateFile,
CreateFileMapping,
MapViewOfFile
将一个PE文件映射入当前进程后,解析这个PE文件的导出表。发现解析的时候对于DLL文件,需要将IMAGE_DIRECTORY_ENTRY_EXPORT中导出表的RVA转换成文件偏移地址(Raw Offset),用文件偏移地址加上映射入的基地址才可以定位到导出表。然而对于EXE文件,则不用。直接将RVA加上映射到的基地址就可以定位到导出表。
在内核中,使用
ZwCreateFile
ZwCreateSection
ZwMapViewOfSection
将一个PE文件映射入当前进程,解析导出表的时候。对于EXE文件,则需要将RVA转换成文件偏移,再加上映射的基地址才可以定位到导出表。然而对于DLL,则不用,直接用RVA加上映射的基地址就可以了。
Ring3 和 Ring0 情况完全相反?而且不管在用户空间还是内核空间,为什么对于EXE和DLL文件处理的方式也不一样?
恳请大家指教!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课