在pcap_compile 函数中

root = NULL; // root就是 struct block的指针

...中间没有对root 操作,

if (root == NULL)
        root = gen_retblk(snaplen_arg);

有必要判断吗? 有必要的

root 是应全局变量 事实上

  在结束解析函数 finish_parse 有对全局变量的赋值, 这个赋值也是对整个解析结果的保存。 而root block也就是 cfg(control flow graph的根 root即取其义)

中间的

***** (void)pcap_parse(); *******

if (root == NULL) /* 全局的block 结构 */
        root = gen_retblk(snaplen);

program->bf_insns = icode_to_fcode(root, &len); // root 作为参数的调用

---------------------------------------------------------

下面来认识一下这个结构

struct block {
    int id;        /* cfg 图中的一个标识 */
    struct slist *stmts;    /* side effect stmts */
    struct stmt s;        /* branch stmt 分支语句 */
    int mark;
    int longjt;        /* jt branch requires long jump */
    int longjf;        /* jf branch requires long jump */
    int level;
    int offset;
    int sense;
    struct edge et; // edge true
    struct edge ef; // edge false
    struct block *head; // 指向head部 , 如果没有其他block 则指向自身
    struct block *link;    /* link field used by optimizer */
    uset dom;  // uset的定义 typedef bpf_u_int32 *uset;
    uset closure;
    struct edge *in_edges;
    atomset def, kill;  // typedef bpf_u_int32 *uset; 定义
    atomset in_use;
    atomset out_use;
    int oval;
    int val[N_ATOMS]; // #define N_ATOMS (BPF_MEMWORDS+2) = 18
};

-------------------------------------------------------------------------------------

optimize.c:icode_to_fcode(root, lenp)   pcap虚拟机的重要级函数

转载于:https://www.cnblogs.com/kwingmei/p/3627413.html

libpcap 中的 struct block相关推荐

  1. CUDA中grid、block、thread、warp与SM、SP的关系

    首先概括一下这几个概念.其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP.thread是一个线程, ...

  2. 在一个有返回值的方法中,用block回传的解决方法

    在一个有返回值的方法中,用block回传的解决方法 参考文章: (1)在一个有返回值的方法中,用block回传的解决方法 (2)https://www.cnblogs.com/dsp-ios/p/64 ...

  3. [原]CUDA中grid、block、thread、warp与SM、SP的关系

    [原]CUDA中grid.block.thread.warp与SM.SP的关系 2015-3-27阅读209 评论0 首先概括一下这几个概念.其中SM(Streaming Multiprocessor ...

  4. 【问题】HDFS中块(block)的大小为什么设置为128M?

    一.为什么HDFS中块(block)不能设置太大,也不能设置太小? 如果块设置过大, 一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢: 另一方面,mapreduc ...

  5. C和C++中的struct

    目录 一文搞懂C和C++中struct 1.C中struct 2.C++中struct 3.总结 C和C++中的Struct区别 C++中的struct和class的区别 一文搞懂C和C++中stru ...

  6. C++中的struct

    网上很多视频中的知识点都比较旧,很多东西也是自己后来多了解了点才恍然大悟. 虽然各种编程语言一直有在更新标准,例如C++的标准从98到11再到14. 虽然C++11已经被大部分编译器支持了,遗憾的是很 ...

  7. magento2 邮件模板中直接调用 block文件

    magento2 邮件模板中直接调用 block文件 有些邮件模板我们想直接写在phtml里面 好想法 示例 {{block class="Magento\Framework\View\El ...

  8. FPGA设计中BRAM(Block RAMs)资源的使用(综合为BRAM)

    FPGA设计中BRAM(Block RAMs)资源的使用   RAM分为BRAM(Block RAMs)和DRAM(Distributed RAM),即块RAM与分布式RAM,这两个差别在于BRAM是 ...

  9. 1-Swift中的Struct 和 Class

    1 为什么swift 推荐使用struct类型 在swift中是推荐使用struct类型的,值类型的变量在赋值的时候会自动进行一次低消耗的值拷贝 对比与对象的拷贝更加高效且不存在线程安全问题. 2 S ...

  10. swift中delegate与block的反向传值

    swift.jpg 入门级 此处只简单举例并不深究,深究我也深究不来.对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会就是,理不理解咱先不说,我先把这个格式记住,对就 ...

最新文章

  1. 一口气说出 OAuth2.0 的四种授权方式
  2. python的plt函数_plt.plot画图函数
  3. setscale方法的用法_基于BigDecimal.setScale的用法小结
  4. ZOJ3772_Calculate the Function
  5. 安装好hadoop集群后,报错如下n org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /data/hadoop-roo
  6. DZY Loves Math IV(杜教筛)
  7. 原生js封装table表格操作,获取任意行列td,任意单行单列方法
  8. 多层数组如何遍历_带你从零学大数据系列之Java篇---第五章:数组
  9. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录
  10. Golang笔记——反射
  11. SpringCloud工作笔记048---RESTful API 中 HTTP 状态码的定义_以及把RESTFul版本号_放到http协议header中_以及RestFul设计时的两个误区
  12. mysql授权与回收_MySQL 授权,回收权限,查看权限
  13. crmeb java单商户源码java二开文档部署文档H5商城部署文档【5】
  14. 利用MATLAB编写高斯积分
  15. CDA第九届认证考试数据报告重磅发布!
  16. 中兴交换机如何查看服务器设备,中兴交换机查看设备序列号
  17. 仿人机器人运动控制技术探讨
  18. 【论文翻译】Mastering the game of Go without human knowledge (无师自通---在不借助人类知识的情况下学会围棋)
  19. php抓取微信图片,PHP使用CURL采集微信图片(公众号)如何绕过防盗链系统?
  20. java 数字转英文_一个java的问题 讲输入的阿拉伯数字转换成英文

热门文章

  1. 特斯拉,谁给你的勇气在中国玩双标
  2. 特殊时期,找工作的 9 点建议!
  3. *第十五周*数据结构实践项目一【验证哈希表及其算法】
  4. sqlplus terminators - Semicolumn (;), slash (/) and a blank line
  5. 谷歌设置支持webgl
  6. 一个自定义的C#数据库操作基础类 SqlHelper
  7. 总结的Server.Mappath的用法
  8. C# .Net中的类型转换(5)
  9. P1441 砝码称重
  10. BZOJ 2683: 简单题(CDQ 分治)