Assembly 使用LLVM进行源到源编译

Assembly 使用LLVM进行源到源编译,assembly,llvm,code-translation,Assembly,Llvm,Code Translation,我需要将x86汇编源代码转换为LLVM人类可读的.ll文件(也称为LLVM汇编语言)。我该怎么做?如果没有直接的解决方案,是否可以在LLVM基础架构中以尽可能少的努力实现一个解决方案 我想,我正在寻找的解决方案应该是某种类型的llc,它可以将.s文件转换回.ll表示。对于那些仍在寻找有关此主题的更多信息的人,我想分享我在web上找到的关于一个正在进行的项目()的信息。该项目有两个组成部分: 用于将x86机器代码动态转换为LLVM IR 用于静态分析x86二进制文件的工具,能够将内联x86程序集转

我需要将x86汇编源代码转换为LLVM人类可读的.ll文件(也称为LLVM汇编语言)。我该怎么做?如果没有直接的解决方案,是否可以在LLVM基础架构中以尽可能少的努力实现一个解决方案


我想,我正在寻找的解决方案应该是某种类型的llc,它可以将.s文件转换回.ll表示。

对于那些仍在寻找有关此主题的更多信息的人,我想分享我在web上找到的关于一个正在进行的项目()的信息。该项目有两个组成部分:

  • 用于将x86机器代码动态转换为LLVM IR
  • 用于静态分析x86二进制文件的工具,能够将内联x86程序集转换为LLVM IR
  • 以下是RevGen的原型:
    RevGen以x86二进制文件作为输入,分三步输出等效的LLVM模块。首先,RevGen查找所有可执行代码块并将其转换为LLVM转换块。其次,当没有更多的转换块要覆盖时,RevGen将它们转换为基本块,并以LLVM格式重建原始二进制文件的控制流图。第三,RevGen解析外部函数调用以构建最终的LLVM模块。对于动态分析,最后一步将LLVM模块与允许执行LLVM模块的运行时库链接起来。

    这个问题已经被问到并回答了。由于存在许多问题(例如间接分支),因此没有直接的解决方案。您可能会发现像llvm qemu和libcpu这样的项目对您很有用。无论如何,这个问题都是一个谢谢你的问题。我已经看过你提到的那些项目了。不幸的是,llvm qemu看起来已经死了。而libcpu在解析程序集方面似乎走自己的路,而不是使用LLVM的基础设施(因此它在支持x86 ISA方面似乎是不完整的)。事实上,我认为我正在寻找的工具应该可以完成LLVM的AsmPrinter的工作,但方向相反,可以将本机ISA指令转换为LLVM的MachineInstr或LLVM-MC的MCInst。那么LLVM的子项目LLVM MC呢?它有一个AsmParser类,该类能够eat.s文件并基于MCInst类生成其表示。在这种情况下,唯一未完成的部分是按照与MCL相反的方向返回到LLVM的基于MachineInstr的表示。MachineInstr!=LLVM IR。MI仍然是一个机器代码。例如,你有“JMP[EAX]”指令。您将把它转换成哪一条LLVM IR指令?例如,我对x86/x86_64->LLVM转换器感兴趣,它有限制,能够分解有限的x86、x86_64指令集,但是重新组装hello world和一些计算算法是合理的。这些工具用于处理已经组装好的程序。除非你说其中一个可以从x86生成LLVM位代码/IR。ASM?@techzilla找到了一些从x86源代码开始的东西?