
编译与反编译
文章平均质量分 71
yeshahayes
这个作者很懒,什么都没留下…
展开
-
流图的分类与识别
源代码的结构在编译器中往往会在某个环节被转换成CFG,不同的控制语句会生成形形色色的控制流结构,而在后端转换的过程中又会生成许多前端语法无法描述的结构出来,在控制流分析的过程中需要去识别这些结构。这篇文章简单的介绍一些基本结构。1,基本块(basic block)。基本块是一个执行时连续的语句序列,往往最后会跟一个终结语句,比如跳转,条件跳转或者返回,除了最后一个语句外没有任何的分支或跳转命令。...原创 2019-03-21 12:37:43 · 1040 阅读 · 0 评论 -
对流图的遍历
正常的图遍历有DFS和BFS,CFG作为图的一种自然也是如此,不过在CFG中,BFS的应用貌似并不多。1,深度优先生成树,树边,前向边,后向边,横边。 在DFS的过程中,按照如下规则标记图中的所有边:存在一条边从一个节点指向其后代,并且之前没有被标记过,则将该边标记为树边(tree edge)。存在一条边从一个节点指向其祖先或自身,将改边标记为后向边(back edge)。存在...原创 2019-03-22 10:51:56 · 604 阅读 · 0 评论 -
流图中的强联通分量
在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。 网上关于强联通分量的理论与分析十分的多,这里不再赘...原创 2019-03-22 17:01:41 · 376 阅读 · 0 评论 -
wpcap过滤器后端代码解读
wpcap是windows平台下著名的数据包嗅探库,在linux下叫libpcap,数据包嗅探软件wireshark就是用来这个库,其中实现了十分高效的数据包过滤算法。很久以前就想看一下他具体的过滤机制,不过那时候没看懂。这两天看到一篇文章提到了winpcap的中间码是SSA格式的,所以又提起兴趣看了一下,发现很多地方都已经能看懂了。(好像新下的源码比以前多了很多注释?很多源码可能维护者也没看...原创 2019-03-26 14:10:56 · 592 阅读 · 0 评论 -
llvm中的Tarjan强连通分量算法
llvm中的强连通算法使用的也是Tarjan算法,与我自己实现的那种粗糙的算法不同,llvm使用栈代替递归实现dfs,一方面防止栈空间不足的问题,另一方面借助这个栈,可以记住当前遍历的状态,从而实现了强连通分量上的迭代器。总之实现的十分的优雅。 代码文件在include\llvm\ADT\SCCIterator.h中。 现在我们来看一下具体实现。 首先定义了两个静态成员函数begi...原创 2019-03-23 11:36:45 · 399 阅读 · 0 评论 -
支配关系以及流图中的循环(一)
支配树这个结构在后端优化中有很重要的作用,尤其是SSA格式的程序中,高效的支配树生成尤其重要。 我们说对于一个图G=(V,E,entry),节点m支配节点n当且仅当从流图入口entry到n的所有路径都经过m,记做:m dom n。所有支配n的节点组成一个集合叫做支配集,记做dom(n)。所有节点均支配自己,即∀\forall∀n∈\in∈V,n dom n。如果存在节点x,y,z...原创 2019-04-04 13:53:06 · 3658 阅读 · 1 评论 -
LLVM-TransformUtils-Mem2Reg
众所周知LLVM IR其实在clang的codegen后并不是strict-SSA结构,因为这时候局部变量表现为alloca指令,同时对局部变量通过load和store进行读写操作,这会导致局部变量可能会存在多个def(多个store指令),而SSA要求每个变量只能有一个def。这时LLVM会通过标准的SSA构造算法来将原始IR转换成minimal-SSA并最终转换成prune-SSA,这一切...原创 2019-07-25 06:57:56 · 2798 阅读 · 0 评论 -
LLVM-Analysis-LoopInfo
LLVM中对循环的识别是十分的简单。他是一种类似于Tarjan的可规约流图识别(《Testing flow graph reducibility》),不同的是LLVM是基于dom-tree的遍历,这有点像区域分析。因为这个原因,LoopInfo这个模块是没法找到不可规约结构的,因为不可规约循环的循环头不支配循环体。其实这点也可以理解,不可规约循环本来就少见,LLVM也不是什么高性能计算编译器。...原创 2019-07-27 10:31:48 · 2375 阅读 · 3 评论