Utility pass是一些功能性的实用程序,既不属于Analysis pass,也不属于Transform pass。例如,extract-blocks pass将basic block从模块中提取出来供bugpoint使用,这个utility pass既不属于Analysis pass,也不属于Transform pass。参考文献[1]中列出了LLVM提供的所有pass。当调
// 在解密函数中创建基本块bb6 和 bb14。 BasicBlock* bb6 = BasicBlock::Create(Ctx, "bb6", DecodeFunc); BasicBlock* bb14 = BasicBlock::Create(Ctx, "bb14", DecodeFunc); // 创建条件跳转指令,根据var5的结果跳转的bb6 或 bb14 Builder2->CreateCo...
bugpoint:自动案例测试减速器 llvm-extract:从 LLVM 字节代码文件中解压出一个函数 llvm-bcanalyzer:字节代码分析器 (分析二进制编码本身,而不是它代表的程序) FileCheck:灵活的文件验证器,广泛的被测试工具利用 tblgen:目标描述阅读器和生成器 lit:LLVM 集成测试器,用于运行测试 七、参考 LLVM TheLLVMCompiler Infr...
llvm-extract - 从一个 LLVM 的模块里提取一个函数。 llvm-bcanalyzer - LLVM 字节码分析器。 开发工具 FileCheck - 灵活的模式匹配文件验证器。 tblgen - C++ 代码生成器。 lit - LLVM 集成测试器。 llvm-build - LLVM 构建工程时需要的工具。 llvm-readobj - LLVM Object 结构查看器。 Driver 动手玩的...
llvm-extract - 从一个 LLVM 的模块里提取一个函数。 llvm-bcanalyzer - LLVM 字节码分析器。 开发工具 FileCheck - 灵活的模式匹配文件验证器。 tblgen - C++ 代码生成器。 lit - LLVM 集成测试器。 llvm-build - LLVM 构建工程时需要的工具。
segedit AppCommunicate.o -extract __LLVM __bitcode .AppCommunicate.bc 1. 通过clang将bitcode转为.s文件 注意事项: 为了避免编译器错误:fatal error: error in backend: Cannot select: intrinsic %llvm.objc.clang.arc.use,这里需要传入-O1或者更高级别的优化开关,以启用-objc-arc-contractPass ...
Function* llvm::ExtractLoop(DominatorTree &DT, Loop *L,boolAggregateArgs) { returnCodeExtractor(&DT, AggregateArgs).ExtractCodeRegion(L->getBlocks()); } //提取一个基础块到一个有标记的新函数里 Function* llvm::ExtractBasicBlock(ArrayRef<BasicBlock*> BBs,boolAggregateArgs){ ...
本质上,上面提到的各类场景,都可以通过对代码进行基本块(BasicBlock-Level)级别插桩的方式解决。 为了方便读者能够继续将本文全部阅读下去,我们先看看一个给微信SDK插桩的实际效果。 基本块(BasicBlock-Level)的概念会在下一章节进行讲解 1、微信SDK 微信SDK(OpenSDK1.8.7.1)[1]提供了3个公开的头文件,其中WXApi.h...
默认会按照 inline 的 path-sensitive 分析,构建 CallGraph,从顶层 caller 按照调用的关系来分析,具体是使用的 WorkList 算法,从 EntryBlock 开始一步步的模拟,这个过程叫做 intra-procedural analysis(IPA)。这个模拟过程还需要对内存进行模拟,clang static analyzer 的内存模型是基于《A Memory Model for Static ...
Function *ExtractCodeRegion(ArrayRef<BasicBlock*> code); 1. // 是否符合条件 1. bool isEligible(ArrayRef<BasicBlock*> code); 1. private: 1. // 是否定义在区块里,当指定的值在被提取的区块里定义的时候返回true 1. bool definedInRegion(Value *V); ...