assembly - 是否可以从程序集文件中获取 LLVM-IR?
问题描述
我使用命令编译了 .S 文件:
clang-8 -c funcs.s -o funcs.o -emit-llvm
我发现,那个 .o 文件是以 ELF 格式生成的。我预计会看到 llvm-ir 格式(在结果文件的开头带有“BC”字符)。
似乎,Clang 忽略了“-emit-llvm”标志。
解决方案
您的问题与是否可以将汇编语言翻译为 LLVM IR、对其进行优化然后将其重新编译为不同的架构并没有根本不同?.
asm 源文件和二进制可执行文件/目标文件对于这个问题基本上是等价的。您仍在尝试反编译为 LLVM-IR。这很难,我不知道是否存在反编译器。
似乎,Clang 忽略了“-emit-llvm”标志。
不,它只是不影响您要求它执行的操作中涉及的任何步骤。
您要求编译器编译为 a .o
,所以它这样做了。
如果输入是.c
和输出 a .s
,它将能够发出 LLVM-IR,但在这种情况下,LLVM-IR 不是将 a 组装.s
到 a的过程的一部分.o
。
因此,在运行时不存在程序的 LLVM-IR 表示clang
,因此没有任何东西可以发出。
推荐阅读
- python - threading.Timer 协程的替代方案
- java - 使用线程运行的后台应用程序
- linux - 仅在屏幕外重新加载 ffmpeg 中的滚动绘图文本过滤器
- css - 如何将背景图片放在右下角?
- javascript - 如何初始化共享的 javascript 模块默认导出
- python - Python Scrapy在关闭时再次启动Spider
- html - 导航栏中的元素如何将您引导到与徽标在同一行的不同页面?
- asp.net-core - 在通过 window.open 请求的后端页面中识别经过身份验证的用户
- python - 在 python 中,使用 Seaborn 库,有什么方法可以为我的图表值添加百分比刻度?
- javascript - Map Function Javascript - 当我们在下拉列表中选择某些内容时如何存储 2 个值