首页 > 解决方案 > 是否可以从程序集文件中获取 LLVM-IR?

问题描述

我使用命令编译了 .S 文件:

clang-8 -c funcs.s -o funcs.o -emit-llvm

我发现,那个 .o 文件是以 ELF 格式生成的。我预计会看到 llvm-ir 格式(在结果文件的开头带有“BC”字符)。

似乎,Clang 忽略了“-emit-llvm”标志。

标签: assemblyclangllvmllvm-ir

解决方案


您的问题与是否可以将汇编语言翻译为 LLVM IR、对其进行优化然后将其重新编译为不同的架构并没有根本不同.

asm 源文件和二进制可执行文件/目标文件对于这个问题基本上是等价的。您仍在尝试反编译为 LLVM-IR。这很难,我不知道是否存在反编译器。

似乎,Clang 忽略了“-emit-llvm”标志。

不,它只是不影响您要求它执行的操作中涉及的任何步骤。

您要求编译器编译为 a .o,所以它这样做了。

如果输入是.c和输出 a .s,它将能够发出 LLVM-IR,但在这种情况下,LLVM-IR 不是将 a 组装.s到 a的过程的一部分.o

因此,在运行时不存在程序的 LLVM-IR 表示clang,因此没有任何东西可以发出。


推荐阅读