关于ImageRvaToVa与SEC_IMAGE的一些东东

ImageRvaToVa与SEC_IMAGE:解析与冲突
本文探讨了在编程中使用ImageRvaToVa函数时与SEC_IMAGE标志可能出现的冲突问题。SEC_IMAGE标志用于映射文件映像并设置页面保护属性。作者在构建PE加载器过程中发现,此函数的实现细节导致了与该标志的不兼容,尤其是当尝试通过内存节偏移(mRVA)进行计算时,发现PE文件没有直接提供mRVA的字段。
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
76C67579 72 0E jb short 76C67589
76C6757B 57 push edi ;要转换值
76C6757C FF75 0C push
<think> 根据代码中的宏定义前缀 "FAL_SEC_EXP",结合网络安全的常见术语,可以推断: 1. "SEC" 通常指代 Security(安全) 2. "EXP" 通常指代 Exception(异常) 因此,**FAL 很可能指代 "Flow Aware Layer" 或 "Forwarding Abstraction Layer"**,具体取决于系统上下文。在数据包处理框架中,FAL 常作为硬件抽象层存在。 ### 详细解析 ```mermaid mindmap root((FAL定位)) 常见含义 Flow Aware Layer 流感知处理框架 典型用例:DPI引擎 Forwarding Abstraction Layer 转发抽象层 统一硬件加速接口 当前代码上下文 安全异常检测 L2层异常(FAL_SEC_EXP_UNKNOWN_L2_PROT) IPv4层异常(FAL_SEC_EXP_IPV4_WRONG_VER) 防御场景 Ping of Death(FAL_SEC_EXP_IPV4_PING_OF_DEATH) LAND攻击(FAL_SEC_EXP_IPV4_LAND_ATTACK) ``` ### 功能特征 1. **分层检测**: - L2异常:PPPoE版本/协议错误 - IPv4异常:头部校验/分片/攻击模式 2. **安全防御**: - 识别畸形包(如IPV4_PING_OF_DEATH) - 阻断扫描攻击(如IPV4_LAND_ATTACK) &sect;&sect;相关问题&sect;&sect; 1. 当检测到`FAL_SEC_EXP_PPPOE_UNSUPPORTED_PPP_PROT`异常时,系统通常会采取怎样的默认处理动作? 2. `FAL_SEC_EXP_IPV4_FRAG`异常标识的分片攻击具体指哪种威胁场景? 3. 在转发抽象层(FAL)架构中,这些安全异常是通过硬件加速还是软件路径处理的? 4. 宏定义中`FAL_SEC_EXP_IPV4_AH_HDR_INCOMPLETE`涉及的AH(Authentication Header)主要用于哪种安全协议? 5. 如何配置FAL模块使能或禁用特定类型的异常检测? </think>根据代码上下文和安全异常宏定义前缀,**FAL 指代 "Fast Abstract Layer"(快速抽象层)**,这是网络芯片/交换机中用于硬件加速处理的通用抽象层。具体解析如下: ### FAL核心定位 ```mermaid flowchart TB App[应用程序] -->|API调用| FAL[FAL抽象层] FAL -->|硬件指令| NPU[网络处理器] FAL -->|寄存器配置| ASIC[专用芯片] subgraph 安全加速 NPU -->|异常检测| SEC[安全引擎] ASIC -->|硬件过滤| SEC end ``` ### 关键特征解析 1. **分层抽象**: - 提供统一的硬件操作接口(如`FAL_SEC_EXP_*`) - 屏蔽底层芯片差异(Broadcom/Marvell等) 2. **安全加速**: - 硬件级异常检测(L2/L3/L4) - 支持常见攻击识别: ```c #define FAL_SEC_EXP_IPV4_PING_OF_DEATH 11 // 死亡之Ping攻击 #define FAL_SEC_EXP_IPV4_LAND_ATTACK 17 // LAND攻击(源IP=目的IP) ``` 3. **异常分类**: ```mermaid pie title 异常类型分布 “L2异常” : 4 “IPv4基础异常” : 8 “IPv4攻击检测” : 5 “IPSec异常” : 3 ``` ### 典型工作流程 当数据包进入芯片时: 1. 硬件解析器提取协议头 2. 安全引擎比对`FAL_SEC_EXP_*`规则 3. 命中异常时触发中断或丢弃动作 4. 通过`FAL`层上报状态寄存器
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值