LLVM IR是一种相当高级的类型化位代码,可以由LLVM直接执行并即时编译为JIT。如果直接在LLVM之上设计一种新的可执行格式或编程语言,使其像解释语言一样被执行,这也就不足为奇了。 LLVM反编译的最新技术。因为它是一种专门设计为易于分析的类型化位代码,所以人们可能希望它相对容易反编译(或至少重新组合成更具可读性或逻辑性的形式)。
理学学士学位论文的工作相对简单,但其他线索似乎很少。我可能希望这位研究员的主管在这方面做进一步的研究,但似乎他的重点更多地放在了编译器设计领域。

是否有研究项目,商业原型,甚至在LLVM反编译领域进行了各种积极的研究吗?

#1 楼

反编译非常容易。长期以来,LLVM随CBackend一起提供,该CBackend可以将LLVM转换为C。 。因此,您可能只需要使用普通的LLVM工具(opt,llc)来“反编译” IR。我发现LLVM IR本身就很容易阅读,但是我很奇怪。

但是,就像将C编译为汇编程序一样,某些信息会丢失或破坏。结构字段名称消失了,永远被索引取代。虽然它们的类型仍然存在。从概念上讲,控制流仍然存在,代码和数据没有混淆,但是可以删除功能,因为它们已失效或内联。我相信枚举值也将被删除。保留要起作用的参数信息以及全局变量的类型。

实际上,有一篇不错的文章,LLVM撰稿人以您建议的方式概述了使用位码格式的陷阱和问题。似乎有很多人听了他的话,所以我不确定我们是否需要超越目前了解LLVM位码的工具...

评论


PNaCl现在使​​用LLVM(的缩减子集)作为其格式。因此,这不仅是编译器IR。

–锑
2013年6月11日14:42