Ubuntu下llvm之pass初探

从零开始的LLVM+Clang(一)——下载、配置到第一个pass 从零开始的LLVM+Clang(一)——下载、配置到第一个pass前言一、配置信息二、LLVM+Clang安装方法一:下载预编译包方法二:下载官方源码自行编译1.配置需求2.下载源码3.编译开始方法三:apt-get(不推荐)三、Hello World Pass! 前言 这段时间在给老板打工,学习计划内有个LLVM+clang的学习计划,于是年少无知的我开始倒腾起了这玩意儿,走了很多弯路,也看了不少大佬的资料,最后也有了些自己的心得,所以就把记录的笔记摘抄一下,留作备忘,也供大家参考。 一、配置信息 Win 阅读详情

(说明:llvm版本2.9)

1.根据http://llvm.org/releases/2.9/docs/GettingStarted.html#tutorial

写一个hello world并编译(后面要用到.bc文件)

#include <stdio.h>

int main() {
  printf("hello world\n");
  return 0;
}
>
% llvm-gcc hello.c -o hello

>

% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc

>

% ./hello

>

% lli hello.bc

>

llvm-dis < hello.bc | less
>

% llc hello.bc -o hello.s
>

Solaris: % /opt/SUNWspro/bin/cc -xarch=v9 hello.s -o hello.native

Others:  % gcc hello.s -o hello.native

>

% ./hello.native

2.在llvm-2.9/lib/Transforms/Hello(llvm自带的pass例子)目录下执行make指令:

> $ make

(安装llvm时已经执行make指令在llvm-2.9/Release+Asserts/lib/中产生了LLVMHello.so文件)

3.Running a pass with opt

$ cd test/llvm/hello

gfj@gfj-virtual-machine:~/test/llvm/hello$ opt -load /home/gfj/work/llvm-2.9/Release+Asserts/lib/LLVMHello.so -hello < hello.bc > /dev/null
Hello: main





C++编译时混淆实战:基于LLVM Pass的代码保护方案与CMake集成指南 代码混淆是一种通过改变程序结构、逻辑和数据表示,以增加逆向工程难度的软件保护技术。其核心原理是在保持程序功能不变的前提下,对源代码或编译中间表示进行等价变换,如控制流扁平化、指令替换和字符串加密。这项技术的核心价值在于提升软件知识产权和核心算法的保护强度,尤其适用于商业软件、游戏、嵌入式系统和通信协议等对代码保密性要求高的场景。在C/C++生态中,基于LLVM框架的编译时混淆器,通过操作LLVM IR实现细粒度、平台无关的保护,已成为主流方案。本文聚焦于**控制流扁平化**和**指令替换**这两种关键混淆技 阅读详情

相关推荐

LLVM11实战教程 - 用最简单的方式运行自定义pass

本文定义了一个最简单的pass插件,pass内容仅为打印一句函数名。同时使用最简单的编译方式:直接用llvm的命令进行编译pass。最后用命令行的方式加载自定义的pass插件。本文目标:用最简单的方式运行自定义的pass插件,方便学习,测试语法!环境:ubuntu20.04 + llvm11其实使用的就是这篇文章里搭建的环境 -AFLGO教程 - 环境搭建 - 基于docker的aflgo源码编译。

QingYun2077的博客 790

IntelliJ IDEA 2023.1发布,新UI、体验优化、Maven导入速度加快!

昨晚看到IDEA官推宣布 IntelliJ IDEA 2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJ IDEA 2023.1 针对新的用户界面进行...

Java精选 984

LLVM CFG/DFG控制流图和数据流图可视化

LLVM可视化

weixin_43854617的博客 8687

Vant:轻量、可靠的移动端UI组件库

Vant(读音:vānt)是一个基于Vue.js的移动端UI组件库,旨在为开发者提供高质量、易于使用的组件,帮助开发者快速构建高性能的移动应用。Vant提供了丰富的组件,涵盖了导航、表单、按钮、列表、轮播图等常用功能,同时还支持按需引入,降低应用的体积。Vant作为一个轻量、可靠的移动端UI组件库,为开发者提供了丰富的组件和便捷的使用方式,大大提高了移动应用开发的效率。如果你正在寻找一个优秀的移动端UI组件库,那么Vant绝对值得一试。

KAIYUANHEMIAO的博客 6236

自适应陷波器的原理与实现

x(t)是叠加有两个频率干扰信号的输入信号,s(t)是需要保留的有用信号,在输入信号中,我们只知道频率w1和w2,但不知道信号的幅度A和相位θ,自适应陷波器可以估计两个未知的幅度和相位值,这需要我们提供两路相互正交的单频信号,如cos(w1t)、sin(w1t),通过调整其权值,从而合成出与干扰信号完全相同的信号A1cos(w1t+θ1),从而实现干扰信号的滤除。采用LMS算法,在保证不损失其他有用信号的情况下,有效地抑制输入信号中某一频率的干扰,如需滤除多个频率,只需要增加相应的输入信号。

Melkiades2333的博客 6880

MOS管关断时尖峰电压的5种实用抑制方案(附实测数据对比)

本文针对MOS管关断时产生的尖峰电压问题,提供了五种经过实验室实测验证的实用抑制方案。文章从尖峰电压的成因分析入手,详细阐述了优化PCB布局、设计RC缓冲电路、选用TVS二极管钳位、调节驱动电路以及使用磁珠吸收高频振荡等方法的原理、实施步骤与实测数据对比,为硬件工程师解决开关电源和电机驱动中的过压应力与EMI问题提供了系统性的实战指南。

1234

AFL源码分析之afl-clang-fast(学习笔记)

前言 通过afl-gcc来插桩这种做法已经属于不建议,更好的就是afl-clang-fast工具是通过llvm pass来插桩。 一、头文件名解析 1、config.h 属于配置类的头文件,包含大量的宏定义,用来规定。 宏定义大概分三个部分,刚开始是一些通用的参数,如输入输出文件的大小,用户的颜色配置;第二部分是跟变异有关的,比如在文件变异时候的interest过程,所用到的预设特殊值,就是在这个头文件中定义的,还有bitflip阶段的 token 长度定义也是在这个头文件中;第三部分是特殊用途的宏定

github_53542847的博客 3412

OpenCompass实战:从零部署大模型评测平台,量化模型能力选型

在大模型技术选型与评估中,客观、可量化的评测体系是工程实践的关键。其核心原理在于通过标准化的数据集、统一的评测方法与自动化流程,将主观的模型体验转化为可比较的指标数据。这种评测框架的技术价值在于解决了模型能力评估的模糊性问题,为开发者提供了模型选型、效果对比与迭代优化的科学依据。典型的应用场景包括对比不同开源模型在代码生成、逻辑推理等特定任务上的性能,或是评估微调后模型在业务数据集上的提升效果。OpenCompass作为开源的大模型全能力评测平台,正是这一理念的工程化实现。它通过模块化的四层流水线架构和配置

weixin_28725037的博客 626

Java最新面试题(全网最全、最细、附答案)

Java 语言具有多种显著特点,使其成为广泛应用的编程语言。首先,Java 是面向对象的,支持封装、继承和多态三大特性,代码以类和对象为组织单位。其次,Java 具有平台无关性,通过 Java 虚拟机(JVM)实现跨平台运行,编译后的字节码可在不同操作系统上执行。Java 是强类型语言,所有变量必须先声明类型,并在编译时进行严格类型检查。此外,Java 提供自动内存管理,通过垃圾回收(GC)机制减少内存泄漏风险,并内置多线程支持,通过 Thread 类或 Runnable 接口创建线程。

javaeEEse的博客 24万+

ZEMAX知识点:坐标间断面(coordinate break)

zemax知识点:坐标间断面

weixin_47638568的博客 1万+

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4602

对LLVM Pass进行Debug

对LLVM Pass进行动态调试

qq_39209008的博客 2292

ABB AC500 系列 PLC 与上位机iFix 的通讯配置

在 软件中,有 3 种方式可以进入 IP config tool 的配置界面 双击 IP_settings,点击 IP config tool,即可进入 IP config tool 界面点击菜单栏的 Tool→IP config如果单独安装了 ABB IP Configration,则可以通过开始→程序→ABB→ABB IPConfigration 启动 IP 配置工具启动 IP config tool 后,即可进入 IP 配置界面。

xdpcxq的专栏 4028

llvm pass运行实践

文章目录前言一、环境二、编写MyPass并运行二、采用官网的二进制包三、编译安装llvm总结 前言       继llvm安装之后,进行自定义pass实现。       需要注意的是,在网上有不少文章以及官方文档,如果读者可以成功实践最好,不然可以参考本文。 一、环境       编写pass实践在这里是基于源码编译的方式。相关

Little_ant_的博客 1786

YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新的ELA注意力机制,并构建C2PSA_ELA

为了解决这些限制,本文介绍了一种高效的本地注意力(ELA)方法,实现了一个简单的结构,大幅度的性能改善。我们精心设计了ELA中的三个超参数,产生了四个不同的版本:ELA-T,ELAB,ELA-S和ELA-L,以满足不同视觉任务的具体要求,如图像分类,目标检测和语义分割。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 1284

基于YOLOv8的建筑材料分类系统:从数据集构建到UI界面实现

建筑材料分类数据集需要包含各种常见建筑材料的图像,并对每种材料进行标注。砖块(Brick)混凝土(Concrete)钢筋(Rebar)木材(Wood)瓷砖(Tile)玻璃(Glass)钢材(Steel)塑料(Plastic)石膏板(Drywall)绝缘材料(Insulation)如果没有找到合适的公开数据集,可以构建自己的数据集。使用智能手机或专业相机拍摄各种建筑材料的照片确保在不同光照条件、角度和背景下拍摄每类材料至少收集300-500张图像。

YOLO 488

LLVM学习笔记

我主要是看IR和PASS我们知道,传统的编译过程大概可分为两个步骤:把源代码翻译成中间表示(IR),把IR翻译成机器码(或者由解释器来解释执行)。这三个层次也就是前端、中端、后端。GCC编译器在设计时没有做好层次划分,你不能知道它的IR是什么样子的,它也不会提供接口让你操作IR,这导致了其前端后端的大量数据耦合在了一起。这样一来,GCC就很难支持新的编程语言或者架构。如果有一个大家都使用的开放的IR,那么每种新语言只需要一个新前端,每个新平台只需要一个新后端,这就比GCC方便的多。

生活需要深度 1501

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ubuntu 安装clang_LLVM从安装到手写一个入门Pass

今天来总结一下llvm的安装和怎么写一个入门级的自定义pass。 安装(环境:ubuntu18.04。个人尝试的经验:18.10是不行滴,里面用到的libc6库版本不对,会导致build-essential无法正常进行,所以老老实实用支持最广的18.04吧,没必要自己给自己找麻烦)0.安...

weixin_39609051的博客 444

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LLVM_pass应用1 读取输入文件的函数

文章目录1、pass2、具体操作1.工程目录2.测试文件hello.c3.CMake说明文件CMakeList.txt4.主要代码 FirstPass.cpp5.编译生成动态链接so文件6.测试使用动态链接总结: 平台: Ubuntu18.04 版本 llvm+clang 5.0.0 编译安装见链接六-24 1、pass 官方介绍与例子 LLVM pass是编译器对代码进行转化和优化。所有pass都是Pass类的子类,通过覆盖Pass类的虚函数来实现功能,可继承的类有ModulePass , CallG

406156440的博客 3151

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Ubuntu LLVM-CLang安装以及Helloworld pass

1.LLVM project安装 参考https://github.com/llvm/llvm-project以及https://github.com/whjthu/llvm-examples 1. Ubuntu版本为: Linux version 5.3.0-42-generic gcc version 7.4.0 ubuntu~18.04.1 2. LLVM project源码下载 Git...

lpn19961107的博客 838

LLVM Pass开发入门:从基础到实践

LLVM Pass是编译器优化和静态分析的核心技术,通过处理LLVM中间表示(IR)实现代码转换与分析。其工作原理基于模块化的Pass机制,分为分析型Pass和转换型Pass两类,前者收集程序特性,后者修改IR实现优化。这项技术在代码性能优化、静态分析工具开发等领域具有重要价值,特别适用于构建自定义编译器工具链。通过环境配置、Pass编写和opt工具实践,开发者可以快速掌握LLVM Pass开发流程。现代PassManager进一步提升了Pass组合的灵活性和性能分析能力,而调试技巧和性能优化方法则能帮助解

weixin_30814329的博客 431

1、Ubuntu16.04编译安装llvm+clang

Ubuntu16.04编译安装llvm+clang 一、环境介绍     操作系统:Ubuntu 16.04(不是虚拟机哦,在虚拟机上做过无数次尝试,均以失败告终)。     LLVM+Clang版本:3.6     Cmake版本:3.6 二、下载安装 1、下载源码 首先安装svn,用来check out LLVM等源码; aptitude install subversion check ...

阿牧路泽 9025

LLVM+Clang新手避坑指南:从源码编译到第一个Pass的完整流程(Ubuntu 20.04实测)

本文为LLVM与Clang新手提供了一份详实的Ubuntu 20.04实战指南,涵盖从系统环境准备、源码编译配置到编写并运行第一个LLVM Pass的完整流程。重点分享了如何高效下载和配置LLVM项目,并避开编译过程中的常见陷阱,帮助开发者快速搭建稳定的开发环境。

peace的博客 453

LLVM PASS安全:从编译器原理到漏洞利用实战

编译器作为软件构建的核心工具,其安全性直接影响最终程序的安全性。LLVM作为现代编译器基础设施,通过模块化设计和统一的中间表示(IR)实现了高效优化。PASS作为运行在IR上的插件,负责代码分析与转换,是编译器优化的关键组件。然而,PASS开发中的内存管理错误、类型混淆等漏洞,可能被恶意IR触发,导致控制流劫持。这种攻击将安全战场从运行时提前到编译时,威胁软件供应链安全。本文结合CTF实战,深入分析LLVM PASS漏洞模式,探讨类型混淆、迭代器失效等常见问题,并演示如何通过堆风水等技术实现漏洞利用。

weixin_30621711的博客 318

LLVM PASS安全漏洞分析与利用:从编译器插件到新型Pwn挑战

LLVM作为现代编译器基础设施,其模块化设计和中间表示(IR)为程序分析与优化提供了强大支持。PASS作为LLVM编译流水线上的可插拔模块,负责对IR进行各种转换与分析,广泛应用于代码插桩、漏洞检测等领域。然而,PASS本身也是由C++编写的程序,当开发者处理来自不受信任的IR输入时,可能引入内存安全漏洞,如缓冲区溢出、整数溢出等。这类漏洞将本应作为安全检测工具的分析模块转变为可被攻击的对象,形成了独特的攻击面。在CTF竞赛和软件安全研究中,LLVM PASS类题目要求选手通过构造特殊的IR输入,触发PAS

weixin_30947043的博客 355
上一篇: ubuntu下 llvm-gcc cannot find crti.o: No such file or directory解决办法
下一篇: 用Teleport Ultra下载网站全部页面
happygogf
博客等级 码龄15年 18粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值