libpcap 中的 struct block
在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相关推荐
- CUDA中grid、block、thread、warp与SM、SP的关系
首先概括一下这几个概念.其中SM(Streaming Multiprocessor)和SP(streaming Processor)是硬件层次的,其中一个SM可以包含多个SP.thread是一个线程, ...
- 在一个有返回值的方法中,用block回传的解决方法
在一个有返回值的方法中,用block回传的解决方法 参考文章: (1)在一个有返回值的方法中,用block回传的解决方法 (2)https://www.cnblogs.com/dsp-ios/p/64 ...
- [原]CUDA中grid、block、thread、warp与SM、SP的关系
[原]CUDA中grid.block.thread.warp与SM.SP的关系 2015-3-27阅读209 评论0 首先概括一下这几个概念.其中SM(Streaming Multiprocessor ...
- 【问题】HDFS中块(block)的大小为什么设置为128M?
一.为什么HDFS中块(block)不能设置太大,也不能设置太小? 如果块设置过大, 一方面,从磁盘传输数据的时间会明显大于寻址时间,导致程序在处理这块数据时,变得非常慢: 另一方面,mapreduc ...
- C和C++中的struct
目录 一文搞懂C和C++中struct 1.C中struct 2.C++中struct 3.总结 C和C++中的Struct区别 C++中的struct和class的区别 一文搞懂C和C++中stru ...
- C++中的struct
网上很多视频中的知识点都比较旧,很多东西也是自己后来多了解了点才恍然大悟. 虽然各种编程语言一直有在更新标准,例如C++的标准从98到11再到14. 虽然C++11已经被大部分编译器支持了,遗憾的是很 ...
- magento2 邮件模板中直接调用 block文件
magento2 邮件模板中直接调用 block文件 有些邮件模板我们想直接写在phtml里面 好想法 示例 {{block class="Magento\Framework\View\El ...
- FPGA设计中BRAM(Block RAMs)资源的使用(综合为BRAM)
FPGA设计中BRAM(Block RAMs)资源的使用 RAM分为BRAM(Block RAMs)和DRAM(Distributed RAM),即块RAM与分布式RAM,这两个差别在于BRAM是 ...
- 1-Swift中的Struct 和 Class
1 为什么swift 推荐使用struct类型 在swift中是推荐使用struct类型的,值类型的变量在赋值的时候会自动进行一次低消耗的值拷贝 对比与对象的拷贝更加高效且不存在线程安全问题. 2 S ...
- swift中delegate与block的反向传值
swift.jpg 入门级 此处只简单举例并不深究,深究我也深究不来.对于初学者来说delegate或block都不是一下子能理解的,所以我的建议和体会就是,理不理解咱先不说,我先把这个格式记住,对就 ...
最新文章
- 一口气说出 OAuth2.0 的四种授权方式
- python的plt函数_plt.plot画图函数
- setscale方法的用法_基于BigDecimal.setScale的用法小结
- ZOJ3772_Calculate the Function
- 安装好hadoop集群后,报错如下n org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /data/hadoop-roo
- DZY Loves Math IV(杜教筛)
- 原生js封装table表格操作,获取任意行列td,任意单行单列方法
- 多层数组如何遍历_带你从零学大数据系列之Java篇---第五章:数组
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):目录
- Golang笔记——反射
- SpringCloud工作笔记048---RESTful API 中 HTTP 状态码的定义_以及把RESTFul版本号_放到http协议header中_以及RestFul设计时的两个误区
- mysql授权与回收_MySQL 授权,回收权限,查看权限
- crmeb java单商户源码java二开文档部署文档H5商城部署文档【5】
- 利用MATLAB编写高斯积分
- CDA第九届认证考试数据报告重磅发布!
- 中兴交换机如何查看服务器设备,中兴交换机查看设备序列号
- 仿人机器人运动控制技术探讨
- 【论文翻译】Mastering the game of Go without human knowledge (无师自通---在不借助人类知识的情况下学会围棋)
- php抓取微信图片,PHP使用CURL采集微信图片(公众号)如何绕过防盗链系统?
- java 数字转英文_一个java的问题 讲输入的阿拉伯数字转换成英文
热门文章
- 特斯拉,谁给你的勇气在中国玩双标
- 特殊时期,找工作的 9 点建议!
- *第十五周*数据结构实践项目一【验证哈希表及其算法】
- sqlplus terminators - Semicolumn (;), slash (/) and a blank line
- 谷歌设置支持webgl
- 一个自定义的C#数据库操作基础类 SqlHelper
- 总结的Server.Mappath的用法
- C# .Net中的类型转换(5)
- P1441 砝码称重
- BZOJ 2683: 简单题(CDQ 分治)