Assembly 是否可以从程序集文件获取LLVM-IR?

Assembly 是否可以从程序集文件获取LLVM-IR?,assembly,clang,llvm,llvm-ir,Assembly,Clang,Llvm,Llvm Ir,我使用以下命令编译了.S文件: clang-8 -c funcs.s -o funcs.o -emit-llvm 我发现,该.o文件是以ELF格式生成的。 我希望看到llvm ir格式(结果文件开头有“BC”字符) 似乎,Clang忽略了“-emit llvm”标志。您的问题与您的问题没有根本区别 对于这个问题,asm源文件和二进制可执行文件/对象文件基本上是等效的。您仍在尝试反编译到LLVM-IR。这很难,我不知道是否存在反编译器 似乎,Clang忽略了“-emit llvm”标志 不,它只

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

clang-8 -c funcs.s -o funcs.o -emit-llvm
我发现,该.o文件是以ELF格式生成的。 我希望看到llvm ir格式(结果文件开头有“BC”字符)


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

您的问题与您的问题没有根本区别

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

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

不,它只是不影响你要求它做的手术中涉及的任何步骤

您要求编译器编译为
.o
,因此它这样做了

如果输入是
.c
,输出是
.s
,它本来可以发出LLVM-IR,但在这种情况下,LLVM-IR不是将
.s
组装成
.o
的过程的一部分


因此,在运行
clang
时,该程序的LLVM-IR表示形式不存在,因此没有任何可发出的信息。

重新打开了该表示形式(忘记了dupe hammer)。可能是@Michael的复制品我的问题比较狭隘,伊姆霍。此外,7-8年前曾询问过可能的重复。在这段时间内,clang/llvm可能发生了很多变化。还有,谢谢你。在这个问题的上下文中,它是有用的信息。LLVM工具链从未也可能永远不会将程序集源文件转换为LLVM位代码。它们总是按原样传递给汇编程序(生成目标代码)。因此编译器无法提供LLVM位代码。@fuz感谢您的意见!我认为,llvm团队一定有这种可能性。为什么?例如,获得CFI的全力支持。对于gcc编译器,我已经看到它的汇编器包含诸如“.cfi_startproc”、“.cfi_endproc”等语句。我还没有找到clang/llvm的替代方法。@lollol x86代码生成器实际上自动从llvm位代码生成适当的cfi指令。CFI指令在LLVM位代码中没有任何意义,因为它们描述了堆栈框架的布局,而在LLVM位代码转换为汇编之前,堆栈框架并不存在。我不知道你为什么认为LLVM需要这个特性。汇编代码从来没有转换成LLVM位代码,也没有理由这样做。据我所知,LLVM附带的x86汇编程序确实能够识别CFI指令。谢谢你的回答。我希望在列表中看到警告,例如,“-emit llvm标志被忽略”。是的,我问了.o文件,但它只是一个扩展名。坦率地说,我不同意这个答案,至少我不同意你们所有的说法。这不是反编译,而是从汇编语言到其他语言(LLVM-IR)的转换器。@lollol:translating from asm to compiler input=decompiling.Right。我的错!但是等等。那么...怎么样对我来说,反编译器是smth一样的反汇编程序…@lollol反编译器和反汇编程序的本质区别在于反汇编程序只是将机器代码的一种表示形式转换成另一种表示形式。另一方面,反编译器必须对机器代码进行复杂的分析,以猜测它可能代表的含义,并猜测理论上可以编译为该机器代码的高级函数。与分解对象文件相比,这是一项极其复杂的任务。