美文网首页我爱编程
基本块和流图

基本块和流图

作者: 413x | 来源:发表于2018-04-14 13:31 被阅读0次

基本块和流图

基本块

概念

从第一条指令开始,直到出现跳转

后续使用信息

知道一个变量的值接下来在什么时候使用对于生成良好的代码非常重要,
比如一个寄存器中值一直未被使用,这个寄存器就可以被分配给其他值

使用的定义:语句j使用了语句i中x的值,则称x在语句i是活跃的。

对一个基本块中的语句求得活跃性和后续使用信息

从基本块B的最后一条指令开始,反向扫描到B的开始;对于每一条指令
i:x=y+z

  • 设置x为不活跃
  • 设置y,z为活跃,设置他们的下一次使用设置语句为i

流图

基本块B和基本块C之间存在一条边当且仅当基本块C的第一条指令紧跟
B的最后一条指令执行

流图的表示

用两个指针,一个指向基本块的头部,一个指向尾部。当我们需要更改
指令条数时,最好创建指令链表。

循环

循环是满足下面条件的基本块集合L

  • L有一个循环入口
  • L每个节点都有到达入口的非空路径,而且这条路径在L中:q

使用工具绘制流图

使用angr, angrutils绘制可执行程序控制流图

待分析程序

#include <stdlib.h>
#include <stdio.h>
int main( int argc,char** argv )
{
    int account=0x4000;
    int key=0;
    if(argc<2){
        fprintf(stderr,"need two args\n");
        return -1;
    }
    scanf("%d",&key);
    if(key+account==0x80){
        printf("success\n");
        return 0;
    }
    else{
        printf("error, go away\n");
        return 0;
    }
}

python代码参考

import angr
from angrutils import *

def main():
    p=angr.Project("./myapp",load_options={'auto_load_libs':False})
    main_obj=p.loader.main_object.get_symbol("main")
    start_state=p.factory.blank_state(addr=main_obj.addr)
    cfg=p.analyses.CFGAccurate(fail_fast=True,starts=[main_obj.addr],initial_state=start_state)
    plot_cfg(cfg,"myapp",asminst=True,remove_imports=True,remove_path_terminator=True)

if __name__=="__main__":
    main()
myapp.png

相关文章

  • 基本块和流图

    基本块和流图 基本块 概念 从第一条指令开始,直到出现跳转 后续使用信息 知道一个变量的值接下来在什么时候使用对于...

  • 编译器笔记45-代码优化-流图

    基本块 (Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块的第一个指令...

  • Untitled

    中间文件类型介绍 • .gcno (gcov note) : 包含重建基本块图和相应的块的源码的行号的信息.• ....

  • 编译器笔记47-代码优化-基本块的优化

    基本块的优化 很多重要的局部优化技术首先把一个基本块转换成为一个无环有向图(directed acyclic gr...

  • 基于源代码的漏洞分析方法

    1. 基本概念 (1)基本块:基本块是指一组连续的程序指令,并且只有一个入口指令和一个退出指令(不一定是跳转指令)...

  • 编译原理——基本块内数据流

    •全局通用子表达式:一个重要的优化是在两个不同的基本块中找到相同表达式的计算。如果先于另一个,我们可以在第一次计算...

  • 获取Basic Block的前驱基本块

    LLVM已经提供了遍历基本块的所有前驱的函数

  • 编译原理——代码优化(调度和循环)

    •优先拓扑顺序:基本块的数据依赖图通常是非循环的,并且有许多拓扑顺序与图一致。多种启发式方法来用来把给定的图选择优...

  • 什么是线流?

    任务流、用户流和流程图——这些术语描述了设计人员用来记录用户交互并显示定向流和基于决策的逻辑的图表。任务流与流程图...

  • 活动图(Activity Diagrams)

    活动图是UML中一种行为图,它展示了控制流和对象流,并且强调它们的顺序和条件控制流。下面换种方法,通过引入uml官...

网友评论

    本文标题:基本块和流图

    本文链接:https://www.haomeiwen.com/subject/qjhlkftx.html