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相关推荐

  1. 使用Roslyn将代码编译成单独的网络模块并将它们组装成动态库

    目录 介绍 代码 代码说明 主程序说明 实用方法 CreateCompilationWithMscorelib(...)方法 EmitToArray(...) 方法 总结 GitHub 上的代码 介绍 ...

  2. as 怎么将多个cpp文件代码编译成so_你编写的Java代码是咋跑起来的?

    如果你是一名 Java 开发人员,你肯定指定 Java 代码有很多种不同的运行方式.比如说可以在开发工具(IDEA.Eclipse等)中运行,可以双击执行 jar 文件运行,也可以在命令行中运行,甚至 ...

  3. as 怎么将多个cpp文件代码编译成so_一段C代码,是如何编译运行的?

    想一下, 我们想把源文件放到内存中执行,应该怎么做? 直觉上我们需要将源代码翻译成机器语言,以某种结构组织代码和数据.再让CPU去按这种结构读取指令.如果是多个源文件, 我们可能还需要按某种方式将它们 ...

  4. python代码编译成pyd_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...

    python执行py文件的流程 当我们执行一个py文件的时候,直接python xx.py即可,那么这个流程是怎么样的呢.先说明一下,python执行代码实际上是先打开文件然后执行里面的代码,所以文件 ...

  5. C代码编译成在android上的可执行程序

    1.将编译器压缩包放到linux系统,并进行解压 , tar -jxvf xxx 2.查看解压后编译器所在的目录 3.打开 /etc/profile 文件添加 export PATH= 编译器所在目录 ...

  6. c 语言怎么编译 .dll,将你的 C 语言代码编译成 .NET

    介绍 通常情况下,对于那些使用C语言编程并开始用C#/ VB或一些其他的用于.NET的编译语言编程,那么他们希望或者甚至是需要调用我们用C语言编写的函数代码. 每当我在互联网上钻研,或说要在编译器中使 ...

  7. 一分钟学会将OpenStack Havana代码编译成DEB包

    Why 我想有以下有几个原因促使我写这篇Blog: 1.很多人开始OpenStack之旅是从Ubuntu开始,但是却没有一篇文章系统的介绍如何将修改后的代码重新编译回DEB包. 2.如果我们采用源代码 ...

  8. python之将python代码编译成.so

    # -* -coding: UTF-8 -* - __author__ = 'Arvin'""" 执行前提:系统安装python-devel 和 gccPython安装c ...

  9. 将python代码编译成.so文件

    https://moonlet.gitbooks.io/cython-document-zh_cn/content/ch1-basic_tutorial.html add_num.pyx文件 def ...

最新文章

  1. 微信无法连接服务器501,微信成语猜猜看第501关BUG出现全是英文怎么过解决方法...
  2. 大数据SQL日常学习——NVL函数
  3. PSSM特征-从生成到处理
  4. ON DUPLICATE KEY UPDATE 用法与说明
  5. Unity C# Job System介绍(一) Job System总览和多线程
  6. 属兔的人有什么缺点呢?
  7. 漫画:跑上百万次代码验证三门问题
  8. python之event【事件】
  9. 机器学习书籍资料推荐
  10. java ftc 68是什么意思_机器人比赛;FTC项目介绍与院校简介
  11. J-Octa 使用MD和MO/DFT计算相对介电常数
  12. 苹果手机投屏器 及如何使用设置连接电脑投屏教程
  13. 浏览器刷新页面导致vuex数据丢失问题如何解决?
  14. 计算机编程语言排行榜—TIOBE世界编程语言排行榜(2021年10月份最新版)
  15. FFMpeg 滤镜中英文对照
  16. 【影视系列】《乘风破浪》
  17. 钱币组合问题(动态规划)
  18. Win10C盘满了怎么清理?如何清理电脑C盘?
  19. Gulp折腾记 - (2)常用任务构建的demo
  20. Spring Cloud入门 -- Ribbon服务消费者(Hoxton.SR5版)

热门文章

  1. Windows10下Python3做OpenGL的编程
  2. windows如何添加本机dns记录_如何规避Sysmon DNS监控
  3. NAR:测序数据鉴别和去除rRNA序列利器RiboDetector
  4. 134人!国家重点研发计划“生物大分子与微生物组”重点专项会评专家名单
  5. 连续发表三篇核酸研究数据库文章
  6. 扩增子分析解读7物种分类统计,筛选进化树和其它
  7. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
  8. R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
  9. Python使用sklearn构建广义线性模型:gamma回归(Gamma regression)实战
  10. R语言dplyr包if_else条件判断选择函数实战