将机器码转换为 LLVM IR(将 X86_64.X86.ARM 反汇编/重新汇编为 LLVM 位码)

发布于 2024-11-28 11:04:17 字数 67 浏览 2 评论 0原文

我想将 X86_64、x86、ARM 可执行文件转换为 LLVM IR(反汇编)。

您建议什么解决方案?

I would like to translate X86_64, x86, ARM executables into LLVM IR (disassembly).

What solution do you suggest ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

别在捏我脸啦 2024-12-05 11:04:17

mcsema 是一款生产质量的二进制升降机。它采用 x86 和 x86-64 并将其静态“提升”到 LLVM IR。它得到积极维护,获得 BSD 许可,并拥有广泛的测试和文档。

https://github.com/trailofbits/mcsema

mcsema is a production-quality binary lifter. It takes x86 and x86-64 and statically "lifts" it to LLVM IR. It's actively maintained, BSD licensed, and has extensive tests and documentation.

https://github.com/trailofbits/mcsema

凯凯我们等你回来 2024-12-05 11:04:17

考虑使用在 < a href="http://dslab.epfl.ch/proj/s2e" rel="noreferrer">S2E 项目。它允许将 x86 二进制文件转换为 LLVM IR。源代码可以通过 url https: //dslabgit.epfl.ch/git/s2e/s2e.git

Consider using RevGen tool developed within the S2E project. It allows converting x86 binaries to LLVM IR. The source code could be checked out from Revgen branch of GIT repository available by url https://dslabgit.epfl.ch/git/s2e/s2e.git.

滿滿的愛 2024-12-05 11:04:17

关于@bsa2000提到的RevGen工具,这篇最新论文 《基于编译器级中间表示的二进制分析和重写系统》指出了S2E和Revinc的一些局限性。

我把它们拉到这里。

  1. 动态翻译的缺点:

    <块引用>

    S2E [16] 和 Revnic [14] 提出了一种动态翻译的方法
    使用 QEMU 从 x86 到 LLVM。与我们的方法不同,这些方法转换
    即时将代码块传输到 LLVM,这限制了 LLVM 的应用
    一次仅分析一个块。

    动态翻译的缺点

  2. IR 不完整:

    <块引用>

    Revnic [14] 和 RevGen [15] 通过合并翻译后的内容来恢复 IR
    块,但恢复的 IR 不完整且仅有效
    当前执行;因此,各种整个程序分析将
    提供不完整的信息。

    IR

  3. 没有抽象堆栈或促销信息

    <块引用>

    此外,翻译后的代码保留了所有假设
    关于堆栈布局的原始二进制文件。他们不提供任何
    获取抽象堆栈或提升内存位置的方法
    符号,这对于几个应用程序是必不可少的
    源代码级分析。

As regards to RevGen tool mentioned by @bsa2000, this latest paper "A compiler level intermediate representation based binary analysis and rewriting system" has pointed out some limitations in S2E and Revinc.

I pull them out here.

  1. shortcoming of dynamic translation:

    S2E [16] and Revnic [14] present a method for dynamically translating
    x86 to LLVM using QEMU. Unlike our approach, these methods convert
    blocks of code to LLVM on the fly which limits the application of LLVM
    analyses to only one block at a time.

  2. IR incomplete:

    Revnic [14] and RevGen [15] recover an IR by merging the translated
    blocks, but the recovered IR is incomplete and is only valid for
    current execution; consequently, various whole program analyses will
    provide incomplete information.

  3. no abstract stack or promoting information

    Further, the translated code retains all the assumptions of the
    original bi- nary about the stack layout. They do not provide any
    methods for obtaining an abstract stack or promoting memory locations
    to symbols, which are essential for the application of several
    source-level analyses.

就是爱搞怪 2024-12-05 11:04:17

我怀疑是否会有通用的解决方案(考虑间接分支等),LLVM IR 比任何汇编器都“更高级别”。虽然可以按每个 BB 进行翻译。您可能需要检查 llvm-qemu 和 libcpu 项目等。

I doubt there will be universal solution (think about indirect branches, etc.), LLVM IR is much "higher level" than any assembler. Though it's possible to translate on per-BB basis. You might want to check llvm-qemu and libcpu projects among others.

半岛未凉 2024-12-05 11:04:17

只需发布一些有关将 ARM 二进制文件转换为 LLVM IR 的参考信息:

disarm - arm binary to llvm ir disassembler

https:// code.google.com/p/disarm/

但是,我没有尝试过,因此不确定它的质量和稳定性。其他人可以发布有关该项目的更多信息吗?

Just post some references on translating ARM binary to LLVM IR:

disarm - arm binary to llvm ir disassembler

https://code.google.com/p/disarm/

However, I have not tried it, thus not sure about its quality and stability. Anyone else may post additional information about this project?

稚然 2024-12-05 11:04:17

有一个新项目,处于早期阶段,libbeauty
https://github.com/jcdutton/libbeauty

关于项目的文章:Libbeauty:另一个反向-工程工具,2013 年 12 月 24 日,Michael Larabel - http://www.phoronix.com/scan.php?page=news_item&px =MTU1MTU

目前仅支持x86_64 的子集作为输入。项目目标之一是能够将生成的 LLVM IR 编译回程序集,以获得具有相同功能的二进制文件。

There is new project, being in some early phases, The libbeauty:
https://github.com/jcdutton/libbeauty

Article about project: Libbeauty: Another Reverse-Engineering Tool, 24 December 2013, Michael Larabel - http://www.phoronix.com/scan.php?page=news_item&px=MTU1MTU

It only supports subset of x86_64 as input now. One of the project goals - is to be able to compile the generated LLVM IR back to assembly to get the binary with same functionality.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文