![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LLVM
文章平均质量分 59
pheidole
这个作者很懒,什么都没留下…
展开
-
LLVM 好用的option
1. -opt-bisect-limit 可结合禁用超过指定限制的所有优化pass,帮助跟踪在优化期间不正确的转换导致不正确运行时行为的问题。原创 2021-06-16 17:49:15 · 266 阅读 · 0 评论 -
LLVM代码混淆分析及逻辑还原
概述LLVM Obfuscator是一款工业级别的代码混淆器,在过去几年的CTF里我们经常会遇到经过代码经过它混淆的情况。这片博文记录了我们对混淆器原理的研究以及从中发现的有关混淆器的设计实现的脆弱之处。基于我们的研究结果,我们在Binary Ninja平台上写了一个插件,通过这个插件可以自动化的解决掉由于代码混淆带来的逆向分析困难。LLVM Obfuscator简介LLVM Obfuscator是一个基于LLVM框架实现的一个开源代码混淆器,整个项目包含了三个相对独立的LLVM pass, 每转载 2021-06-02 10:29:45 · 1695 阅读 · 0 评论 -
ubuntu安装clang/llvm
Mark官网介绍:https://apt.llvm.org/原创 2021-04-25 16:44:04 · 661 阅读 · 1 评论 -
clang及opt的opt level和pass list
一. Clang和opt执行的pass序列相同,可以通过下面命令查看:Clangclang -OX -mllvm -debug-pass=Arguments foo.corclang -OX -mllvm -debug-pass=Structure foo.cOptllvm-as < /dev/null | opt -O3 -disable-output -debug-pass=Arguments二.https://stackoverflow.com/questio..原创 2021-04-21 11:25:06 · 1368 阅读 · 0 评论 -
LLVM源码调试
编写Pass时,可以借助DEBUG宏添加调试代码,这些代码只有在工具命令行加入“-debug”选项时才会执行。1. 编译LLVM debug版本release版本中一般已关闭DEBUG宏,可以自己编译debug版本,以使能DEBUG宏用于调试。编译LLVM时,将build type设为Debug即可:cmake -DCMAKE_BUILD_TYPE=Debug ... ...2. DEBUG宏定义llvm/include/llvm/Support/Debug.h3. Clang...原创 2021-01-05 17:38:21 · 3763 阅读 · 0 评论 -
LLVM中的pass及其管理机制
LLVM编译器框架的核心概念是任务调度和执行。编译器开发者将IR分解为不同的处理对象,并将其处理过程实现为单独的pass类型。在编译器初始化时,pass被实例化,并被添加到pass管理器中。pass管理器以流水线的方式将各个独立的pass衔接起来,然后以预定义顺序遍历每个pass,根据pass实例返回值启动、停止或重复运行不同pass。因此,LLVM pass管理机制的主要模块包括pass、pass管理器、pass注册及相关模块,如PassRegistry、AnalysisUsage、AnalysisRes转载 2020-11-26 10:06:47 · 7155 阅读 · 1 评论 -
LLVM测试框架
LLVM测试框架LLVM测试框架简介在LLVM编译器后端开发过程中,针对特定平台必然要定义特定指令集及其指令格式,并对后端流程的各个阶段或pass做相应修改。根据需求编写“测试用例”的测试驱动开发(Test-DrivenDevelopment,简称TDD)是推动开发进行的有效方法,可以在出现问题时实现可回溯,有助于编写简洁可用和高质量的代码。LLVM测试框架是在LLVM编译器后端开发过程中实现测试驱动开发的有效手段,有很高的灵活性和健壮性,可保证加速开发过程稳步进行。本文涵盖LLVM测试框架,需转载 2020-11-25 16:17:35 · 1456 阅读 · 0 评论 -
自己动手写LLVM pass(零)
原文连接:https://llvm.comptechs.cn/post/18789.html您已经跟随着LLVM的官方教程完成了HelloWorld pass…..现在,您想学的更多,看更多的代码,例子……因此,您可以深入到无比优秀的LLVM源代码树,了解这些着名且功能强大的优化如何通过pass实现的…但结果却是被异乎寻常的传递构造语法所迷惑,这种语法既不类似于你刚刚遵循的教程,也没有在官方网站的任何地方记录这正是我几年前碰到的,当时,我还是一个LLVM新手和LLVM pass是我之前转载 2020-08-26 11:27:23 · 331 阅读 · 0 评论 -
自己动手写LLVM Pass(四)
在stackoverflow上有关LLVM的最常见问题之一是:我写了一个Hello World Pass,如何使用clang来运行它,而不是opt?最常见的解决方案之一是单独使用(传统)PassManager扩展点和-Xclang -load -Xclang MyPass.so命令行选项。然而,我想知道:我可以通过简单地将一个命令行选项传递给clang来运行我的Pass或自定义功能吗?当然,这需要对LLVM源代码树进行一些更改。但我相信这将是学习clang内部以及它如何与LLVM交互的...转载 2020-08-26 11:26:10 · 398 阅读 · 0 评论 -
自己动手写LLVM Pass(三)
LLVM Pass官方教程会教您如何编译一个相当简单的(Legacy)LLVM Pass,她能够被opt动态加载。但现在你是一个懒惰的家伙,你想自动的在opt甚至clang中运行您的Pass。本文提供了将Pass集成到旧版PassManager管道的几种方法之一。然后,我的下一篇文章将讨论如何添加自定义clang命令行选项以启用自定义功能。默认情况下,要在Pass管道中运行Pass,我们需要先弄清楚管道是如何构建的。有一个构建器类,PassManagerBuilder用于构建旧版PassMana...转载 2020-08-26 11:12:47 · 622 阅读 · 0 评论 -
自己动手写LLVM Pass(二)
收集程序分析的任务也被建模为LLVM PassManager中的Pass,除了它们从不(也不应该)修改IR。此外,与传统的PassManager相比,分析数据在新的PassManager中以不同的方式进行管理和开发,我决定使用单独的文章来介绍它。本文将讨论如何使用新的AnalysisManager检索分析数据。所以抓住你最喜欢的编辑器,让我们开始吧!您可能在传统Pass中找到的重要功能之一是分析管理器与PassManager深度集成。您将通过getAnalysis<…>方法...转载 2020-08-26 11:10:17 · 501 阅读 · 1 评论 -
自己动手写LLVM Pass(一)
PassManager系统是LLVM中最重要的基础架构之一。经过大约10多年的努力,开发人员决定给她一个新的面目。新的PassManager Pass背后的基本概念仍然与旧版本相同:通过LLVM IR单元运行Pass,例如,功能来检查内部的IR或甚至修改它,然后将结果IR传递给下一个Pass管道。最大的区别是我们写Pass的方式。新Pass和新PassManager背后有几种设计理念。我强烈建议读者查看过去LLVM开发者大会的相关讲座。但我不打算详细介绍。本文仅通过简单的HelloNewPMP.转载 2020-08-26 10:43:43 · 1170 阅读 · 0 评论