- 博客(5)
- 收藏
- 关注
原创 wpcap过滤器后端代码解读
wpcap是windows平台下著名的数据包嗅探库,在linux下叫libpcap,数据包嗅探软件wireshark就是用来这个库,其中实现了十分高效的数据包过滤算法。很久以前就想看一下他具体的过滤机制,不过那时候没看懂。这两天看到一篇文章提到了winpcap的中间码是SSA格式的,所以又提起兴趣看了一下,发现很多地方都已经能看懂了。(好像新下的源码比以前多了很多注释?很多源码可能维护者也没看...
2019-03-26 14:10:56 551
原创 llvm中的Tarjan强连通分量算法
llvm中的强连通算法使用的也是Tarjan算法,与我自己实现的那种粗糙的算法不同,llvm使用栈代替递归实现dfs,一方面防止栈空间不足的问题,另一方面借助这个栈,可以记住当前遍历的状态,从而实现了强连通分量上的迭代器。总之实现的十分的优雅。 代码文件在include\llvm\ADT\SCCIterator.h中。 现在我们来看一下具体实现。 首先定义了两个静态成员函数begi...
2019-03-23 11:36:45 357
原创 流图中的强联通分量
在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。 网上关于强联通分量的理论与分析十分的多,这里不再赘...
2019-03-22 17:01:41 333
原创 对流图的遍历
正常的图遍历有DFS和BFS,CFG作为图的一种自然也是如此,不过在CFG中,BFS的应用貌似并不多。1,深度优先生成树,树边,前向边,后向边,横边。 在DFS的过程中,按照如下规则标记图中的所有边:存在一条边从一个节点指向其后代,并且之前没有被标记过,则将该边标记为树边(tree edge)。存在一条边从一个节点指向其祖先或自身,将改边标记为后向边(back edge)。存在...
2019-03-22 10:51:56 536
原创 流图的分类与识别
源代码的结构在编译器中往往会在某个环节被转换成CFG,不同的控制语句会生成形形色色的控制流结构,而在后端转换的过程中又会生成许多前端语法无法描述的结构出来,在控制流分析的过程中需要去识别这些结构。这篇文章简单的介绍一些基本结构。1,基本块(basic block)。基本块是一个执行时连续的语句序列,往往最后会跟一个终结语句,比如跳转,条件跳转或者返回,除了最后一个语句外没有任何的分支或跳转命令。...
2019-03-21 12:37:43 943
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人