当前位置: 首页 > news >正文

2、LLVM 函数名称加密 及3种PASS的实现

sudo usermod -a -G vboxsf nowind   nowind是你的虚拟机登录的用户名解决virtualbox 虚拟机共享文件夹不能使用的问题

第一种:源码内实现pass:

实现EncodeFunctionName 的pass,核心代码如下

相关文件的修改:

因为后面同样用到ollvm,所以我已经放到一起了,资源下载:

https://download.csdn.net/download/ahjxly/88609122

因为全部都是修改llvm目录下的文件,替换include和lib文件夹

替换完成后 cd cd llvm/llvm-project-9.0.1/llvm/cmake-build-debug/,执行ninja -j8,重新编译下。这次编译会快很多。

然后单独执行 ninja LLVMEncodeFunctionName,生成so文件,进行使用。

使用方式和之前的文章一样,执行

opt -load '/home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-release/lib/LLVMEncodeFunctionName.so' -encode hello_clang.ll -o hello_clang_encode.bc

clang hello_clang_encode.bc -o hello_clang_encode

第二种:在源码外实现EncodeFunctionName2,修改根目录下的CMakeList.txt:

set(LLVM_DIR /home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/lib/cmake/llvm/),这里为你自己的路径

执行结果如下:

/home/nowind/llvm/CLion-2023.3/clion-2023.3/bin/cmake/linux/x64/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja -G Ninja -S /home/nowind/llvm/pro/pro2/outPass -B /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug
-- Linker detection: GNU ld
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug[Finished]
/home/nowind/llvm/CLion-2023.3/clion-2023.3/bin/cmake/linux/x64/bin/cmake --build /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug --target all -j 6
[2/2] Linking CXX shared module EncodeFunctionName2/LLVMEncodeFunctionName2.soBuild finished

生成的文件在

/home/nowind/llvm/pro/pro2/outPass/cmake-build-debug/EncodeFunctionName2/LLVMEncodeFunctionName2.so

使用opt 命令

opt -load /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug/EncodeFunctionName2/LLVMEncodeFunctionName2.so  -encode2 hello_clang.ll
WARNING: You're attempting to print out a bitcode file.
This is inadvisable as it may cause display problems. If
you REALLY want to taste LLVM bitcode first-hand, you
can force output with the `-f' option.EncodeFunctionName22: test_hello1 -> 9c119247aefaa12cdd417eb3d57d5b2a
EncodeFunctionName22: main -> main
EncodeFunctionName22: test_hello2 -> af0aaac8b98b759ace7b9eacbd2238a6

得到同样的结果。

clang使用自定义的pass,生成可执行文件

 clang -Xclang -load -Xclang /home/nowind/llvm/pro/pro2/outPass/cmake-build-release/EncodeFunctionName2/LLVMEncodeFunctionName2.so -encode2 hello_clang.ll -o hello_clang_encode3 -Wno-unused-command-line-argument

第三种:EncodeFunctionName注册到clang中:

/home/nowind/llvm/llvm-project-9.0.1/llvm/lib/Transforms/IPO/PassManagerBuilder.cpp populateModulePassManager方法中增加 MPM.add(createEncodeFunctionName());

重新编译clang: 这里用的release,因此PATH要改:

ninja clang

export PATH=/home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-release/bin:$PATH

clang -mllvm -encode_function_name hello_clang.bc

切换到debug:

修改EncodeFunction中:CMakeLists.txt set(LLVM_DIR /home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/lib/cmake/llvm/)

cd cmake-build-debug

ninja opt 重新编译opt

opt -load /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug/EncodeFunctionName2/LLVMEncodeFunctionName2.so -encode2 hello_clang.ll -o hello_clang_encode.bc

注意pass不能重名

opt 断点:

OutPass中配置EncodeFunctionName2的opt为

/home/nowind/llvm/llvm-project-9.0.1/llvm/cmake-build-debug/bin/opt

参数配置为:

-load /home/nowind/llvm/pro/pro2/outPass/cmake-build-debug/EncodeFunctionName2/LLVMEncodeFunctionName2.so -encode2 /home/nowind/llvm/pro/pro2/hello_clang.ll -o /home/nowind/llvm/pro/pro2/hello_clang_encode.bc

但这样配置完毕后发现一个问题,就是日志在clion控制台中看不到,只有换行,勾选了

Emulate terminal in the output console才能看到,奇怪的很,但也不影响什么

相关文章:

2、LLVM 函数名称加密 及3种PASS的实现

sudo usermod -a -G vboxsf nowind nowind是你的虚拟机登录的用户名解决virtualbox 虚拟机共享文件夹不能使用的问题 第一种:源码内实现pass: 实现EncodeFunctionName 的pass,核心代码如下 相关文件的修改: 因为后面同样用到…...

Python网络爬虫的基础理解-对应的自我理解误区

##通过一个中国大学大学排名爬虫的示例进行基础性理解 以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:(1)按照排名先后顺序输出不同年份的前10…...

基于ssm的家庭财务管理系统设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本家庭财务管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...

前端知识(八)———前端需要掌握的技术有哪些方面

前端开发需要掌握的技术包括以下几个方面: 1.HTML:HTML是网页的基础骨架,是网页内容的载体,负责网页内容的排列和布局。 2.CSS:CSS是网页的样式表,负责网页的外观和样式。 一般情况下HTMLCSS是在一起使用…...

【九】spring、springmvc、springboot、springcloud

spring、springmvc 、springboot 、springcloud 简介 从事IT这么些年,经历了行业技术的更迭,各行各业都会有事务更新,IT行业技术更迭速度快的特点尤为突出,或许这也是从事这个行业的压力所在,但另一方面反应了这个行业…...

Core Web Vitals 是排名因素吗?

Core Web Vitals 会影响您的自然搜索排名吗?在本文中,我们将研究索赔、证据和判决。 Core Web Vitals 衡量页面体验信号,以确保为搜索用户提供引人入胜的用户体验。 但是 Core Web Vitals 会影响您的自然搜索排名吗? 声明&…...

“蒙企通”线上平台升级 助力内蒙古自治区民营经济发展

为进一步落实《中共中央、国务院关于促进民营经济发展壮大的意见》和内蒙古自治区党委、政府《关于进一步支持民营经济高质量发展的若干措施》,内蒙古自治区发展改革委联合自治区工商联共同开展“自治区促进民营经济发展项目”,为民营经营主体拓展市场、…...

电商早报 | 12月13日| 2023胡润男企业家榜发布:黄铮位于第三

2023胡润男企业家榜发布:拼多多创始人跻身前三 12月12日消息,胡润研究院发布《2023胡润男企业家榜》,列出了胡润百富榜中前50名中国男性企业家,总财富6.37万亿元,上榜门槛640亿元。 这是胡润研究院首次发布“男企业家…...

Terraform实战(二)-terraform创建阿里云资源

1 初始化环境 1.1 创建初始文件夹 $ cd /data $ mkdir terraform $ mkdir aliyun terraform作为terraform的配置文件夹,内部的每一个.tf,.tfvars文件都会被加载。 1.2 配置provider 创建providers.tf文件,配置provider依赖。 provider…...

ELADMIN - 免费开源 admin 后台管理系统,基于 Spring Boot 和 Vue ,包含前端和后端源码

一款简单好用、功能强大的 admin 管理系统,包含前端和后端源码,分享给大家。 ELADMIN 是一款基于 Spring Boot、Jpa 或 Mybatis-Plus、 Spring Security、Redis、Vue 的前后端分离的后台管理系统。 ELADMIN 的作者在 Github 和 Gitee 上看了很多的项目&…...

Centos安装docker显示 No Package Docker-Ce Available

安装docker 查看当前系统内核 查看方式 uname -r显示如下 [root@test ~]# uname -r 3.10.0-1127.19.1.el7.x86_64重要提示: docker内核版本必须是3.10+以上的版本 1、卸载老版本的 docker 及其相关依赖 yum remove docker docker-common container-selinux docker-selin…...

如何使用玻璃材质制作3D钻石模型

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格&#xf…...

工具:Jupyter

Jupyter是一个开源的交互式计算环境,由Fernando Perez和Brian Granger于2014年创立。它提供了一种方便的方式来展示、共享和探索数据,并且可以与多种编程语言和数据格式进行交互。Jupyter的历史可以追溯到2001年,当时Fernando Perez正在使用P…...

即时通讯技术文集(第27期):实时音视频技术合集(Part2) [共17篇]

​为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第27 期。 [- 1 -] 专访微信视频技术负责人:微信实时视频聊天技术的演进 [链接] http://www.52im.net/thread-1201-1-1.html [摘要] 本次专访…...

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized:对象锁,保证了临界区内代码的原子性,采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,其它线程获取这个对象锁时会阻塞,保证拥有锁的线程可以安全的执行临界区内…...

【PHP】php发送邮箱验证码格式美化,样式美化

效果展示&#xff1a; 格式美化前 格式美化后 代码 大多数框架都自带有封装好的发送email方法&#xff0c;就不多赘述&#xff0c;主要写格式&#xff1a; <? php// 验证码过期时间 $expire 120; // 发件人邮箱 $from_email xx163.com; // 收件人 $to_email to163.com…...

【EI会议征稿中】2024年第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)

2024年第四届人工智能、自动化与高性能计算国际会议&#xff08;AIAHPC 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Automation and High Performance Computing 2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于20…...

数据库设计规范编制文档

本文的目的是提出针对Oracle数据库的设计规范&#xff0c;使利用Oracle数据库进行设计开发的系统严格遵守本规范的相关约定&#xff0c;建立统一规范、稳定、优化的数据模型。 参照以下原则进行数据库设计&#xff1a; 1) 方便业务功能实现、业务功能扩展&#xff1b; 2) 方便设…...

RocketMq集成SpringBoot(待完善)

环境 jdk1.8, springboot2.7.3 Maven依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from…...

刚学Python有点难怎么办?这是好事啊!

对于像我一样非计算机专业出身的学生&#xff0c;每当我们想自学一些编程技能的时候&#xff0c;就感觉困难重重&#xff0c;思考坚持下去有没有意义&#xff0c;因此我总结了以下7个小Tips&#xff0c;这些Tips曾经帮助我合理地安排时间&#xff0c;让自学Python的节奏保持起来…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...