
LLVM
文章平均质量分 63
Back~~
这个作者很懒,什么都没留下…
展开
-
LLVM-GUET
如何创建带 -mllvm 选项的 llvm pass-mllvm 是 LLVM 编译器的一个选项,它允许你传递参数给 LLVM 的底层代码生成器。这个选项通常用于调试或者优化 LLVM 的代码生成 。添加头文件选择在某个地方创建你的头文件,添加必要的c/c++库,并在命名空间中声明 -mllvm 启动时激活的函数以 obfuscator/include/llvm/Transforms/Obfuscation/Substitution.h 为例 :#ifndef _SUBSTITUTIONS_原创 2024-05-15 21:15:15 · 1073 阅读 · 0 评论 -
LLVM中期报告
基本块分割不是纯正的代码混淆技术,但是在以基本块为基本单位的代码混淆技术中,基本块的数量越多,进行代码混淆后的复杂度越大,通过人为增加基本块的数量,可以达到提高代码混淆效果的目的。从LLVM代码混淆的角度出发,函数之间的正常调用构成了待混淆程序的原始控制流,不同的基础代码块构成了一个个的函数,每个基础代码块又是由一条一条程序语句构成的,每条程序语句可以看做是一条指令。在对运算指令的替换中,首先遍历需要混淆的函数或基本块中的指令,当检测到指定的指令后,在对应的位置创建混淆的指令,并取代原来的指令。原创 2024-05-13 22:20:56 · 1083 阅读 · 0 评论 -
Mulsubstitution
【代码】Mulsubstitution。原创 2024-03-14 19:36:01 · 325 阅读 · 0 评论 -
Substitution.cpp
【代码】Substitution.cpp。原创 2024-03-12 22:35:04 · 271 阅读 · 0 评论 -
SplitBasicBlock.cpp
【代码】SplitBasicBlock.cpp。原创 2024-03-02 18:06:23 · 147 阅读 · 0 评论 -
Flattening.cpp(模仿+学习)持续更新中~~
【代码】Flattening.cpp(模仿+学习)持续更新中~~原创 2024-03-01 12:10:10 · 279 阅读 · 0 评论 -
LLVM的中间表示
整个LLVM文件的内容(无论是汇编码还是位码)被视为定义一个LLVM模块模块是LLVM IR 顶层数据结构每个模块包含一系列函数,每个函数由包含一系列指令的一系列基本块组成模块还包含用于支持该模型的外围实体,如全局变量、目标数据布局、外部函数原型以及数据结构声明LLVM局部变量与汇编语言中寄存器类似,可以用任何以%符号开头的名称命名这一指令将执行两个局部变量%5和%6的加法,并将结果至于新的局部变量%7中用户可以自由地给这些值命名,甚至可以只用数字就像上面一样。原创 2024-02-14 18:14:51 · 836 阅读 · 0 评论 -
clang前端
前端(在Clang库中实现)编译驱动程序(在clang命令和Clang驱动程序库中实现)实际的编译器(在clang-ccl命令中实现)clang -ccl中的编译器不仅是由Clang库实现的,而且还广泛使用其他LLVM库来实现编译器的中间部分、后端以及集成的汇编器先分析clang编译器驱动程序的命令行调用Clang驱动程序通过使用-ccl选项来生成另一个自身实例,以及调用其内部的编译器通过在编译器驱动程序中使用-Xclang < option >可以将特定的参数传递给该命令该工具与。原创 2024-02-14 13:00:32 · 1562 阅读 · 0 评论 -
编写代码(LLVM的第一个项目)
ParseBitcodeFile函数将使用这个对象来读取我们的输入文件的内容,并解析文件中LLVM IR 的内容。LLVM模块的概念类似于翻译单元,其中包含所有编码到位码文件中的内容,也是LLVM层次结构中的最高实体。我们从程序使用cl命名空间中的llvm工具(cl代表命令行)来实现我们的命令行接口。后面我才发现,需要clang++,并且我之前的那个makefile文件没有启动的。当我们找到这些函数定义时,将打印它们的名称和它包含的基本块的数量。遇到个错误,这里的文件头的路径是有问题的。原创 2024-02-13 14:30:36 · 396 阅读 · 0 评论 -
编写Makefile
C语言中,我们使用visual studio开发软件时候,写程序开始时候都会创建一个project项目文件,然后在文件里面编译 .h 和.c 的文件。在Linux中,有一个叫make的东西,就相当于C语言的集成开发环境,我们只需要在make里面创建文件,写代码,make会帮我们管理这些文件。不过我们创建的项目不叫project,而是称为Makefile,打开一个make源程序包,发现很多Makefile的文件,说明里面有很多的项目。原创 2024-02-13 12:44:33 · 1107 阅读 · 0 评论 -
OLLVM(以DES.c为示例进行测试)
控制平坦化混淆目的是将原始的顺序执行的控制流图转换为一个看似在同一层次的基本块之间循环执行的控制流图,从而提升逆向工程分析者在静态分析中的难度。使用算法生成不透明谓词可以生成具有特定特性的不透明谓词。例如,可以生成不透明谓词的值具有特定的分布,或者不透明谓词的值与程序的逻辑相关联。不透明谓词是指一个由随机数生成的逻辑表达式,用于控制程序的执行流程。不透明谓词可以用于控制程序的执行流程,从而增加逆向工程的难度。使用随机数生成不透明谓词是最简单的方法。在这种情况下,不透明谓词的值是随机的,因此难以理解和预测。原创 2024-01-31 14:39:44 · 416 阅读 · 0 评论 -
LLVM的基本库
下面这链接中介绍了LLVM库之间的依赖关系。原创 2024-01-28 18:46:56 · 585 阅读 · 0 评论 -
LLVM(使用独立的工具)
它也可以反汇编相同的对象,从而转储这些指令的相应的汇编信息和内部LLVM机器指令数据结构。它结合了解释器和静态编译器的优点,可以提高程序的性能。输入必须是LLVM位码文件(编码的LLVM IR),并且生成的输出文件必须具有相同类型。-emit-llvm标志告诉clang根据是否存在-c或-S标志生成LLVM 位码或LLVM汇编码文件。-emit-llvm和-c标志一起使用,告诉clang以LLVM位码格式生成一个目标文件。:该工具将人工可读的LLVM IR 文件(称为LLVM汇编码)转换位LLVM位码。原创 2024-01-28 18:08:13 · 1030 阅读 · 0 评论 -
LLVM(基本的混淆)
这里我生成了两个,一个优化前的,一个优化后的。这看着不太明显,因为我就写了。原创 2024-01-03 22:32:18 · 760 阅读 · 0 评论 -
LLVM(简介)
LLVM 从2003 年10月24 日发布第一个开源版本 LLVM1.0 以来,截止2020 年第一个季度,已经发布到LLVM10.0.0 版本,十几年间开发者社区也在不断壮大,从 2007 年起至今,每年都会举办 1-2 次 LLVM 开发者大会,在大会上有很多优秀的开发者们分享他们对于LLVM项目的一些技术问题研究。经典的编译器如gcc在设计上都是提供一条龙服务的: 你不需要知道它使用的IR是什么样的,它也不会暴露中间接口来给你操作它的IR。LLVM的核心是一个库,而不是一个具体的二进制程序。原创 2024-01-03 22:04:57 · 4369 阅读 · 0 评论