深度剖析WinPcap之(十)——数据包的内核过滤(12)

本文转自http://eslxf.blog.51cto.com/918801/278879

 

1.1.1.      BPF系统架构图

10-5 BPF的系统架构图
一个用高层语言表示的过滤器,被编译与优化成 BPF 虚拟机中间字节码 (VM Byte Codes) 。字节码接着经过保护边界,检查代码的合法性,接着在线解释或汇编代码为本地机器码。
 
BPF 系统包含了下列组件,把 用高层语言表示的过滤器转换为底层可执行的数据包过滤器。
 
Ø  前端输入是一个高层语言的过滤器表达式,基于被最初 libpcaptcpdump 使用的公开的谓词语法。
Ø  BPF 编译器把该谓词表达式转换为一个命令,用一个 SSA 中间 形式表示的 控制流程图。
Ø  SSA 中间 形式通过代码优化器执行全局的与局部的数据流优化。优化器的输出为一个与BPF虚拟机模型一致的字节码。
Ø  BPF 字节码接着被传递到一个可执行的环境中,比如穿过用户层—内核层的边界去执行用户定义的协议分析。
Ø  一当进入目标保护区域,安全确认机制就认为该字节码是可信的。
Ø  最后,一个 “just in time” (JIT) 编译器 把优化过的并通过安全检查的字节码汇编成本地机器码,并执行可选的与机器相关的优化。如果目标环境中是一个解释器而不是一个本地硬件,比如在 BPF 内核执行,其解释执行过滤器的字节代码,那么最后一步将被省略。 但是, WinPcapNPF 不解释过滤器,而是执行它们。为了性能的原因,在使用过滤器之前, NPF 把它给 JIT 编译器,该编译器把它转换成一个本地 80X86 的函数。  当一个数据包被捕获后, NPF 调用该本地函数,而不是调用该过滤器的解释器,这使得过滤处理很快。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值