Windows环境下编译OLLVM源码(VS2022)

news2024/11/24 9:27:52

windows环境下编译OLLVM 13.x

    • VisualStudio配置
    • 下载OLLVM13.x
    • ollvm的使用

网上关于windows环境编译ollvm信息比较杂乱,在此编译成功的基础上做一下总结!

VisualStudio配置

1,正常配置C++桌面环境
2,在单个组件中选择用于Windows得C++ Cmake工具
在这里插入图片描述

下载OLLVM13.x

链接: link.
解压后进入文件夹使用
Developer Command Prompt for VS 2022打开该路径
输入:

cmake -G "Visual Studio 17 2022" -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ./llvm
这里解释一下参数

-G “Visual Studio 17 2022”:使用 VS 进行编译源码(或者Visual Studio 16 2019)
-DLLVM_ENABLE_PROJECTS=“clang”:启用clang,有多个选择 但我们只需要clang,官方文档有说明
-DCMAKE_BUILD_TYPE=Release:构建 release 版本,比 debug 版本编译快很多
-DLLVM_INCLUDE_TESTS=OFF:关闭 llvm 的头文件测试,也是为了加快编译速度
-DLLVM_ENABLE_NEW_PASS_MANAGER=OFF:这个非常重要,llvm-12.x 开始默认使用 newPM进行编译源码,导致 ollvm 不起作用!因此,需要加上这个参数禁用掉 newPM。(虽然可以用 -flegacy-pass-manager 让 llvm 不走 newPM 编译,但是…你不觉得在你的源码上加一串怎么长的命令很难受吗)
之后打开VISUALSTUDIO进行Debug或者Release编译,编译后即可得到clang.exe文件
VS打开后:
在这里插入图片描述

编译成功后:
在这里插入图片描述

ollvm的使用

Instructions Substitution (指令替换)

-mllvm -sub: 启用instructions substitution
-mllvm -sub_loop=3: 对每个函数混淆3次,默认1词
Control Flow Flattening (控制流平坦化)

-mllvm -fla: 启用control flow flattening
-mllvm -split: 启用block切分,提升平展程度
-mllvm -split_num=3: 对每个block混淆3次,默认1词
Bogus Control Flow (虚假控制流)

-mllvm -bcf: 启用 bogus control flow
-mllvm -bcf_loop=3: 对一个函数混淆3次,默认1次
-mllvm -bcf_prob=40: 代码块被混淆的概率是40%,默认30%
-mllvm -sobf: 字符串加密

函数注解的使用
//Functions annotations
int foo() __attribute((annotate((“sub”))));
int foo() {
return 2;
}

例如 clang -mllvm -fla demo.c -o demo.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go基础知识全面总结

文章目录 go基本数据类型bool类型数值型字符字符串 数据类型的转换运算符和表达式1. 算数运算符2.关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级转义符 go基本数据类型 bool类型 布尔型的值只可以是常量 true 或者 false。⼀个简单的例⼦&#…

Windows系统C++语言环境下通过SDK进行动作捕捉数据传输

NOKOV度量动作捕捉系统可以与市面上主流的操作系统和编程语言实现通信。可以在Windows系统C语言环境下通过SDK进行动作捕捉数据传输。 一、形影软件设置 1、实时模式和后处理模式都可以通过SDK传输数据。以后处理模式为例。将模式切换到后处理模式 2、加载一个刚体数据 3、打…

2.7V 到 5.5V、串行输入、电压输出、16 位数模转换器MS5541/MS5542

MS5541/MS5542 是一款单通道、 16 位、串行输入、电压 输出的数模转换器,采用 2.7V 至 5.5V 单电源供电,输出范围 为 0V 至 V REF 。在输出范围内保证单调性,在温度范围为 -40 C 至 85 C 能够提供 1LSB INL 的 14 位精度。…

2023年重水(氧化氘)市场规模:现状及未来发展趋

重水是水的一种,又称氘化水,它的摩尔质量比一般水要重。普通的水是由两个只具有质子的氢原子和一个氧16原子所组成,但在重水分子内的两个氢同位素氘,比一般氢原子有各多一个中子,因此造成重水分子的质量比一般水要重。…

双wan路由器介绍( 多wan口路由器用途,双wan网速叠加快吗)

​ 文章同款:https://www.key-iot.com/iotlist/sr500-15.html 对于工业领域来说,网络连接的可靠性和稳定性至关重要。双WAN口工业级路由器SR500是一款出色的解决方案,旨在提供强大的多线路冗余和负载均衡功能,以满足工业环境中的…

使用PHP实现对称加密和解密过程,真的是太简单了!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

[yarn]yarn异常

一、运行一下算圆周率的测试代码,看下报错 cd /home/data_warehouse/module/hadoop-3.1.3/share/hadoop/mapreduce hadoop jar hadoop-mapreduce-examples-3.1.3.jar pi 1000 1000 后面2个数字参数的含义: 第1个1000指的是要运行1000次map任务 …

【Element】隐藏 el-table 展开行的箭头

需求 点击行展开行,隐藏箭头 方法 首先需求是点击行显示展开行 row-click"rowClick"const rowClick (row: any, column: any, event: any) > {console.log(row, column, event)if (multipleTable.value) {multipleTable.value.toggleRowExpansio…

存储虚拟化讲解

目录 存储虚拟化的分类 按照虚拟化发生的位置分类 基于主机的虚拟化 基于存储设备的虚拟化 基于网络的虚拟化 按照虚拟化实现方式分类 带内虚拟化 带外虚拟化 按照虚拟化的对象分类 虚拟机磁盘类型 按照磁盘的特性分类 按照磁盘的安全性分类 什么是虚拟化 存储虚拟…

许战海战略文库 | 从“物美价廉”到“技术出海”:中国车企新能源时代如何征服全球市场?

引言:从燃油车到新能源汽车,中国车企的海外战略正在经历一次深刻的转变。面临技术、产业链和文化等多重挑战,他们如何调整步伐,捕捉新的机遇,同时避免潜在风险,将决定其在全球市场的未来地位。 在燃油车时代,中国车企凭借“物美价廉”赢得了一…

基于SSM的“大学生艺术节”管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Powerpoint不小心被覆盖?PPT误删文件如何恢复?

PowerPoint不小心删除了,这可能是众多学生和工作人员最头痛的事情了。PPT被覆盖或误删可能意味着几个小时的努力付之东流。那么PPT覆盖的文档要如何救回来呢?小编将会在本篇文章中为大家分享几个解决方案,使PPT文档覆盖还原操作成为可能&…

Go:如何在GoLand中引用github.com中的第三方包

本篇博客主要介绍如何在GoLand中引入github.com中的第三方包。具体步骤如下: 正文 (1) 先在GoLand中打开go的工作区目录(即环境变量$GOPATH设置的变量)。如图: 关于工作区目录中的三个子目录: bin: 保存已编译的二进制可执行程序;pkg: 保…

OpenAI首届开发者大会多项更新汇总

OpenAI Dev Day 提供了多项更新,总结如下: GPT 4-Turbo - 现在可以通过API使用GPT 4-Turbo。- 提供了更长的128k令牌上下文,之前为32k。- 相比GPT-4,成本降低了50%以上。- 知识更新至2023年4月,之前为2021年9月。- 性…

JAVA 版小程序商城免费搭建 多商家入驻 直播带货 商城系统 B2B2C 商城源码之 B2B2C产品概述

1. 涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

快速搭建UmiJS4.0项目及常见问题解决方案

yarn create umi选择项目类型 ○ Pick Umi App Template │ Simple App选择创建工具 ○ Pick Npm Client │ yarn选择源 ○ Pick Npm Registry │ taobao启用 Prettier(可选) yarn umi g √ Pick generator type Enable Prettier -- Setup Pr…

Cesium 相机设置

1.setView 直接跳转到目的地 // 设置相机位置 const position Cesium.Cartesian3.fromDegrees(113, 31, 20000); // setView通过定义相机目的地(方向),直接跳转到目的地 viewer.camera.setView({ destination: position, // 位置设置 orientation: { //…

【C/PTA——循环结构3】

C/PTA——循环结构3 7-1 二分法求多项式单根1.题目要求2.代码实现 7-2 循环-十进制转化1.题目要求2.代码实现 7-3 梅森数1.题目要求2.代码实现 7-4 单词长度1.题目要求2.代码实现 7-5 21循环-求和31.题目要求2.代码实现 7-6 21循环-金字塔1.题目要求2.代码实现 7-7 循环-杨辉三…

Vue技巧大揭秘:v-show与v-if的区别及性能对比一目了然

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、v…