关于ImageRvaToVa与SEC_IMAGE的一些东东

本文探讨了在编程中使用ImageRvaToVa函数时与SEC_IMAGE标志可能出现的冲突问题。SEC_IMAGE标志用于映射文件映像并设置页面保护属性。作者在构建PE加载器过程中发现,此函数的实现细节导致了与该标志的不兼容,尤其是当尝试通过内存节偏移(mRVA)进行计算时,发现PE文件没有直接提供mRVA的字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hMapping=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);

第三个参数或上了SEC_IMAGE,指定该属性相当于告诉系统要映射文件的映像并给页面设置相应的保护属性,具体见核心编程P456。我在写PE加载器的时候发现该参数与ImageRvaToVa函数有冲突!!!!具体ImageRvaToVa是怎么实现的微软没公开,大体逆了一下

76C67554 > 8BFF mov edi, edi
76C67556 55 push ebp
76C67557 8BEC mov ebp, esp
76C67559 56 push esi ;保存ESI
76C6755A 8B75 14 mov esi, dword ptr [ebp+14] ;将区段结构指针放入ESI
76C6755D 85F6 test esi, esi ;如果ESI是否为0
76C6755F 57 push edi ;保存EDI
76C67560 8B7D 10 mov edi, dword ptr [ebp+10] ;EDI=要转换值
76C67563 74 16 je short 76C6757B ;ESI为0,直接转换
76C67565 8B0E mov ecx, dword ptr [esi] ;不为空,将结构地址放入ECX
76C67567 85C9 test ecx, ecx ;ECX为空直接转换
76C67569 74 10 je short 76C6757B
76C6756B 8B41 0C mov eax, dword ptr [ecx+C] 
76C6756E 3BF8 cmp edi, eax
76C67570 72 09 jb short 76C6757B
76C67572 8B51 10 mov edx, dword ptr [ecx+10]
76C67575 03D0 add edx, eax
76C67577 3BFA cmp edi, edx
76C67
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值