使用clang将C/C++代码编译成LLVM的中间代码(LLVM ir bitcode),并反汇编LLVM bitcode
test.c文件内容如下:
#include<stdio.h>
int main(void){printf("hello world!\n");return 0;
}
clang是使用LLVM最为后端,所以支持编译成LLVM的字节码
clang -emit-llvm -o test.bc -c test.c
将LLVM bitcode 进一步编译为汇编:
clang -o test test.bc
LLVM-DIS命令是LLVM反汇编。它可以一个LLVM bitcode文件并将其转换为人类可读的LLVM汇编语言。
反编译LLVM 字节码:
zhang@debian:~$ llvm-dis test.bc -o -
; ModuleID = 'test.bc'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"@.str = private unnamed_addr constant [14 x i8] c"hello world!\0A\00", align 1; Function Attrs: nounwind uwtable
define i32 @main() #0 {%1 = alloca i32, align 4store i32 0, i32* %1, align 4%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i32 0, i32 0))ret i32 0
}declare i32 @printf(i8*, ...) #1attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }!llvm.ident = !{!0}!0 = !{!"clang version 3.8.1-24 (tags/RELEASE_381/final)"}
参考文章:c - How to make clang compile to llvm IR - Stack Overflow
使用clang将C/C++代码编译成LLVM的中间代码(LLVM ir bitcode),并反汇编LLVM bitcode相关推荐
- 使用Roslyn将代码编译成单独的网络模块并将它们组装成动态库
目录 介绍 代码 代码说明 主程序说明 实用方法 CreateCompilationWithMscorelib(...)方法 EmitToArray(...) 方法 总结 GitHub 上的代码 介绍 ...
- as 怎么将多个cpp文件代码编译成so_你编写的Java代码是咋跑起来的?
如果你是一名 Java 开发人员,你肯定指定 Java 代码有很多种不同的运行方式.比如说可以在开发工具(IDEA.Eclipse等)中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至 ...
- as 怎么将多个cpp文件代码编译成so_一段C代码,是如何编译运行的?
想一下, 我们想把源文件放到内存中执行,应该怎么做? 直觉上我们需要将源代码翻译成机器语言,以某种结构组织代码和数据.再让CPU去按这种结构读取指令.如果是多个源文件, 我们可能还需要按某种方式将它们 ...
- python代码编译成pyd_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...
- C代码编译成在android上的可执行程序
1.将编译器压缩包放到linux系统,并进行解压 , tar -jxvf xxx 2.查看解压后编译器所在的目录 3.打开 /etc/profile 文件添加 export PATH= 编译器所在目录 ...
- c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET
介绍 通常情况下,对于那些使用C语言编程并开始用C#/ VB或一些其他的用于.NET的编译语言编程,那么他们希望或者甚至是需要调用我们用C语言编写的函数代码. 每当我在互联网上钻研,或说要在编译器中使 ...
- 一分钟学会将OpenStack Havana代码编译成DEB包
Why 我想有以下有几个原因促使我写这篇Blog: 1.很多人开始OpenStack之旅是从Ubuntu开始,但是却没有一篇文章系统的介绍如何将修改后的代码重新编译回DEB包. 2.如果我们采用源代码 ...
- python之将python代码编译成.so
# -* -coding: UTF-8 -* - __author__ = 'Arvin'""" 执行前提:系统安装python-devel 和 gccPython安装c ...
- 将python代码编译成.so文件
https://moonlet.gitbooks.io/cython-document-zh_cn/content/ch1-basic_tutorial.html add_num.pyx文件 def ...
最新文章
- 微信无法连接服务器501,微信成语猜猜看第501关BUG出现全是英文怎么过解决方法...
- 大数据SQL日常学习——NVL函数
- PSSM特征-从生成到处理
- ON DUPLICATE KEY UPDATE 用法与说明
- Unity C# Job System介绍(一) Job System总览和多线程
- 属兔的人有什么缺点呢?
- 漫画:跑上百万次代码验证三门问题
- python之event【事件】
- 机器学习书籍资料推荐
- java ftc 68是什么意思_机器人比赛;FTC项目介绍与院校简介
- J-Octa 使用MD和MO/DFT计算相对介电常数
- 苹果手机投屏器 及如何使用设置连接电脑投屏教程
- 浏览器刷新页面导致vuex数据丢失问题如何解决?
- 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2021年10月份最新版)
- FFMpeg 滤镜中英文对照
- 【影视系列】《乘风破浪》
- 钱币组合问题(动态规划)
- Win10C盘满了怎么清理?如何清理电脑C盘?
- Gulp折腾记 - (2)常用任务构建的demo
- Spring Cloud入门 -- Ribbon服务消费者(Hoxton.SR5版)
热门文章
- Windows10下Python3做OpenGL的编程
- windows如何添加本机dns记录_如何规避Sysmon DNS监控
- NAR:测序数据鉴别和去除rRNA序列利器RiboDetector
- 134人!国家重点研发计划“生物大分子与微生物组”重点专项会评专家名单
- 连续发表三篇核酸研究数据库文章
- 扩增子分析解读7物种分类统计,筛选进化树和其它
- python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
- R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
- Python使用sklearn构建广义线性模型:gamma回归(Gamma regression)实战
- R语言dplyr包if_else条件判断选择函数实战