IR:(Intermediaterepresentation)LLVM 中间表示,是一种LLVM的中间语言。
IR 的三种表现形式:二进制文件.bc、人类可阅读文件.ll、内存的表达;
CFG:(Control flow graph)控制流图

我们先来写一个小例子:test.c:

#linux下code
vim test.c
#include <stdio.h>
int main(void)
{int i,j,n;j=1;n=3;for(i=0;i<n;i++) {printf("%d",j);j++;if(j>9)j-=10;}printf("\n");return 0;
}

这是一个循坏,为了增加复杂度,我加了一个 if 语句。

#用gcc(或clang)来编译一下,看看运行结果

$ gcc -o test test.c
$ clang -o test test.c
#生成 test 可执行文件
$ ./test
#运行结果:
123

可用llvm来生成IR

clang -c -emit-llvm test1.c -o test1.bc 编译产生字节码
clang -S -emit-llvm test.c -o test.ll 编译产生可视化字节码

生成“.ll”文件

#linux下code
clang -S -emit-llvm test.c -o test.ll

生成的’.ll’文件部分截图

使用opt调用pass
LLVM-PASS官网地址:

opt -dot-dom test.ll

生成 dom.main.dot 文件

根据 dom.main.dot 文件生成CFG

dot -Tpng -o test.png dom.main.dot

就出现了

打开test.png

你可以选择将linux下的.png图片传到windows上打开
这里我提供一个python脚本

# -*- coding:utf-8 -*-
#初始化参数:
host = "10.3.0.207"
port = 22
timeout = 30
user = "root"
password = "******"#Paramiko下载文件
import paramiko
def sftp_down_file(server_path, local_path):try:t = paramiko.Transport((host, 22))t.connect(username=user, password=password)sftp = paramiko.SFTPClient.from_transport(t)sftp.get(server_path, local_path)t.close()#python2.*版本except Exception, e:print e'''#python3.*版本except Exception as error:print (error)'''
if __name__ == '__main__':sftp_down_file("/root/test.png", "D:/test.png")#linux下图片路径可用 "pwd" 命令来查看

在windows下 D盘就可以找到这个图片了

生成包含IR的CFG-小例子相关推荐

  1. 生成句法分析树以及从一个小例子来看词义消歧及语义角色标注

    一.生成句法分析树 把一句话按照句法逻辑组织成一棵树,由人来做这件事是可行的,但是由机器来实现是不可思议的,然而算法世界就是这么神奇,把一个十分复杂的过程抽象成仅仅几步操作,甚至不足10行代码,就能让 ...

  2. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  3. python(dict字典相关知识以及小例子:生成一个列表,存放100个随机整数,找出出现次数最多的数字)

    一.什么是字典? #字典的使用 #子字典是一个容器类,可以用来存储数据 #列表存储数据特点:1.有序的 2.每一个都有一个索引,通过索引可以对数据进行查询,修改,删除#字典存储数据: key:valu ...

  4. 在Eclipse中写第一个hibernate小例子

    在hibernate自带的文档中,包含了一个很简单的小例子,不过这个小例子是基于ant的,而且说的不是很详细,不利于新手学习.在这里,我将在Eclipse中实现这个例子,并给出详细的实现步骤.     ...

  5. 深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子

    深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/de ...

  6. ​【Python基础】告别枯燥,60 秒学会一个 Python 小例子(文末下载)

    本文推荐一个python的傻瓜式的学习资源,内容简单易懂,让人可以在60 秒学会一个 Python 小例子 当前库已有 300多 个实用的小例子 本文来源:https://github.com/jac ...

  7. 整理了60个Python小例子,拿来即用!

    小例子 一. 数字 1 求绝对值 绝对值或复数的模 In [1]: abs(-6) Out[1]: 6 2 进制转化 十进制转换为二进制: In [2]: bin(10) Out[2]: '0b101 ...

  8. python pandas的基本使用及基本操作小例子!

    一.生成数据表 1.首先导入pandas库,一般会用到numpy库,所以先导入备用! import numpy as np import pandas as pd 2.导入CS或者xlsx文件: fa ...

  9. php函数的默认值,php函数指定默认值方法的小例子

    php函数指定默认值方法的小例子 本节内容: php函数指定默认值 在php编程中,为自定义函数设定默认值,当用户调用该函数时,如果不给参数指定值,参数会用默认值顶替. 例1, 复制代码 代码如下: ...

最新文章

  1. 删除a3.txt文件中含dong的行
  2. 营销推广中心设计(一)营销架构与策略
  3. Cordova实战培训
  4. C++ String类写时拷贝 4
  5. 微博月活跃用户数增至5.73亿 移动端用户占比达94%
  6. xml TO json(非递归实现)
  7. Redis集群环境之linux搭建多机版---已完结,跟着一步一步来你就可以集群成功
  8. android windowmanager 分析,WindowManagerService
  9. c语言程序设计网站有哪些,C语言编程软件有哪些?
  10. 小程序开发的流程简介
  11. google aviator:Java逻辑公式引擎
  12. JAVA自行车租借管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  13. laravel 项目笔记之SendCloud 驱动
  14. 最适合Java开发者的大数据工具和框架
  15. 【汇正财经】沪指冲高回落,创业板全天领涨
  16. 分享一些构思低保真必备软件
  17. pandas学习(数据分组与分组运算、离散化处理、数据合并)
  18. PyTorch 笔记Ⅵ——Titanic 及 breast_cancer 分类应用
  19. 状态空间离散化matlab,现代控制理论:3.4g 线性连续系统状态空间模型的离散化...
  20. 2.4市场需求文档MRD

热门文章

  1. QQ技术--查看任意QQ状态
  2. MQTT协议详解及开发教程(四)MQTT协议报文格式
  3. solidworks电气元件3d库_工业设备设计从开始到完成五个简单的步骤与正版SOLIDWORKS...
  4. kaptcha-2.3.2.jar包下载
  5. git合并分支到主干
  6. 同时复制保存杭州女装网多个商品图片的好方法
  7. 十六进制转八进制代码心得
  8. 特殊的氛围在现实与梦想
  9. ip route-static配置静态路由
  10. python写入txt不覆盖_写入现有文件而不覆盖/擦除