由于LLVM14有两种pass方式,一种legacy pass一种new pass,LLVM官方正在逐渐用new pass淘汰legacy pass,所以这里使用new pass作为补丁。 wgethttps://heroims.github.io/obfuscator/NewPass/ollvm14.patchcdllvm-projectgitapply --reject --ignore-whitespace ../ollvm14.patch ...
首先,LLVM有一个优化pass,专门针对虚函数。如果被调用的方法只有一个实现,那么编译器会将这次调用优化为直接调用。这意味着,即使你使用了抽象的Trait并通过dyn Trait进行调用,如果这个Trait只有一个实现,那么这种抽象实际上并没有增加额外的调用成本。此外,LLVM还有一个无用虚函数的优化。这个优化可以删除虚表中定义但...
-Zself-profile 的第二轮结果 传闻可以把 rustc 的后端从 LLVM 换成 Cranelift,于是我又用 rustc Cranelift 后端重新构建了一遍,-Zself-profile 结果看起来不错: 使用Cranelife 的 -Zself-profile 第二轮结果 可惜,在实际的构建中 Cranelife 比 LLVM 慢。 Rust 后端:默认 LLVM 比 Cranelift 强。(测试于 Lin...
传闻可以把 rustc 的后端从 LLVM 换成 Cranelift,于是我又用 rustc Cranelift 后端重新构建了一遍,-Zself-profile 结果看起来不错: 使用Cranelife 的 -Zself-profile 第二轮结果 可惜,在实际的构建中 Cranelife 比 LLVM 慢。 Rust 后端:默认 LLVM 比 Cranelift 强。(测试于 Linux,数据越小越好) 2023 年 1...
Rust 后端:默认 LLVM 比 Cranelift 强。(测试于 Linux,数据越小越好) 2023 年 1 月 7 日更新:rustc 的 Cranelift 后端维护者 bjorn3 帮我看了下为什么 Cranelift 在我的项目上效果不佳:可能是 rustup 的开销导致的。如果绕过这部分 Cranelife 效果可能会有提升,上图中的结果没有采用任何措施。
ollvm-pass Out-of-tree llvm obfuscation pass,可在编译时对二进制进行混淆,通过 rustc/opt 动态加载使用,无需重新编译 llvm 和 rustc,支持以下混淆方式: 间接跳转,并加密跳转目标(-irobf-indbr) 间接函数调用,并加密目标函数地址(-irobf-icall)
LLVM由C++编写,用于优化任意语言编写的程序,LLVM的命名最早源于Low Level Virtual Machine的缩写,LLVM代码有3种表示形式,IR,bitcode,汇编码,llvm提供了不同的优化Pass,对每个Pass的源码编译,得到一个Object文件,之后这些文件链接得到一个库,Pass之间由LLVM Pass管理器来统一管理 ...
Rust 后端:默认 LLVM 比 Cranelift 强。(测试于 Linux,数据越小越好) 2023 年 1 月 7 日更新:rustc 的 Cranelift 后端维护者 bjorn3 帮我看了下为什么 Cranelift 在我的项目上效果不佳:可能是 rustup 的开销导致的。如果绕过这部分 Cranelife 效果可能会有提升,上图中的结果没有采用任何措施。
文件rust/compiler/rustc_codegen_llvm/src/llvm/mod.rs是Rust编译器的LLVM代码生成模块的一个文件。该文件定义了一些用于与LLVM交互的结构体、枚举和常量。 fliter 2024/04/02 1030 听GPT 讲Rust源代码--compiler(16) 函数rustgpt编译编译器 在Rust源代码中,rust/compiler/rustc_span/src/lib.rs文件定义了与Ru...
Rust SIMD 的绝大部分开发工作是在 Rust 编译器、计算加速库stdarch、多平台适配层这三层;计算加速库 stdarch 以用户接口的方式集成了各种SIMD 指令集,由于 Rust 编译器而编译成相应的 LLVM IR,并传递给 LLVM,由此间接的生成需要的 SIMD汇编指令。而计算加速库 stdarch 之上还有一层多平台适配层,因为我们之前提到...