LLVM IR 反编译的最新技术是什么?

逆向工程 反编译 虚拟机
2021-06-11 02:22:11

LLVM IR 是一种相当高级的类型化位代码,可以由 LLVM 直接执行并即时编译为 JIT。如果直接在 LLVM 之上设计一种新的可执行格式或编程语言,并像解释语言一样执行,我不会感到惊讶。

在这方面,我很好奇 LLVM 反编译的最新技术。因为它是一种专门设计为易于分析的类型化位代码,所以人们可能会认为它相对容易反编译(或至少重新组装成更具可读性或逻辑性的形式)。

谷歌搜索了这个 BSc 论文,它做了一个相对基本的工作,但似乎很少有其他线索。我本以为这位同学的导师会在这方面做一些进一步的研究,但他似乎更关注编译器设计的研究领域。

LLVM 反编译领域是否有研究项目、商业原型,甚至任何类型的积极研究?

1个回答

反编译非常容易。很长时间以来,LLVM 都附带了一个 CBackend,可以将 LLVM 转换为 C。

由当今的前端 (clang) 创建的 LLVM 非常适合您能想到的任何类型的分析和理解。所以你可能只使用普通的 LLVM 工具(opt、llc)来“反编译”IR。我发现 LLVM IR 本身就很可读,但我很奇怪。

但是,就像将 C 编译为汇编程序一样,某些信息会丢失或破坏。结构字段名不见了,永远被索引取代。他们的类型仍然存在。控制流作为一个概念仍然存在,没有代码和数据的混淆,但可以删除函数,因为它们是死的或内联的。我相信枚举值也被删除了。函数的参数信息仍然存在,全局变量的类型也是如此。

实际上有一个不错的帖子,其中 LLVM 贡献者概述了以您建议的方式使用其位码格式的陷阱和问题。很多人似乎都听过他的话,所以我不确定我们是否需要超越目前用于理解 LLVM 位码的工具......