llvm
bin2415
这个作者很懒,什么都没留下…
展开
-
AddressSanitizer算法及源码解析
AddressSanitizer简介AddressSanitizer是Google用于检测内存各种buffer overflow(Heap buffer overflow, Stack buffer overflow, Global buffer overflow)的一个非常有用的工具。该工具是一个LLVM的Pass,现已集成至llvm中,要是用它可以通过-fsanitizer=address选项使原创 2017-07-26 12:19:09 · 13669 阅读 · 0 评论 -
llvm:Call Graph And Control Flow Graph
前言最近对llvm框架进行了初步的了解,才体会了llvm真正的魅力。它不仅是一个编译器框架,更是研究者们研究程序的一个有力的工具。本篇文章主要介绍一下如何对llvm的中间语言IR进行处理从而生成Call Graph(CG)和Control Flow Graph。Call GraphCall Graph又叫做函数调用图,用来记录程序中的函数调用关系的。比如: void foo(){原创 2017-09-24 14:07:14 · 3249 阅读 · 1 评论 -
llvm:Data Flow Graph
Data Flow Graph基本概念Data Flow Graph又叫数据流程图,表示在一个函数中的数据流动的方向。比如一个指令1定义了一个新变量%a,而另一个指令2用到了变量%a,此时就存在从指令1到指令2的边。llvm IR的表示形式是SSA,简单的来说SSA表示形式就是一个变量只能定义一次。x = y + 1;x = y + 2;y = 3;上面的形式就不是SSA的表示形式,因为x被定义原创 2017-09-24 14:07:46 · 2373 阅读 · 0 评论 -
llvm生成rdrand指令
问题在做一个project的时候需要使用llvm的pass对函数进行插桩,在每一个函数头之前插入一条指令 rdrand %rax,在寻找llvm基本指令之后发现并没有生成随机数的指令,这时就想到了llvm中intrinsic函数中是否有关于rdrand指令的函数,在对llvm整个源码进行扫描之后,发现有x86的rdrand的intrinsic函数: X86_INTRINSIC_DATA(rdra原创 2017-11-18 09:59:47 · 1524 阅读 · 0 评论 -
llvm存取fs段内容
问题最近想使用llvm的pass来对每个函数进行插桩,来模拟stack guard的功能。其中碰到了一个很棘手的问题就是如何通过llvm C API实现对fs段内容的存取。要想实现该问题,我通过查看llvm如何实现stack guard,找到了具体的解决方案。下面首先看一下llvm中stackProtector pass如何实现对fs段的存取,然后再介绍一下我自己简化版本的Stack guard。s原创 2017-11-18 11:21:00 · 359 阅读 · 0 评论