gpt4 book ai didi

mips - 寻找一种定义反编译器规则的好方法,需要建议

转载 作者:行者123 更新时间:2023-12-04 15:48:52 40 4
gpt4 key购买 nike

我正在为 MIPS 架构开发一个非常简单的反编译器,随着我的进步,我必须为代码分析定义很多规则,例如“如果这个操作码是 lui 并且下一个操作码是 addiu 然后返回 var = value”或“如果这个操作码是 bne 并且它指的是当前地址之前的地址 - 在解析树中创建循环定义”。问题 - 有很多这样的规则,我找不到定义它们的好方法。我尝试为每条规则编写单独的函数,定义漂亮的 OOP 基本逻辑类并扩展它们以创建规则,甚至尝试在 disasmed 代码上使用正则表达式(令我惊讶的是,这比预期的要好)但无论我尝试过什么,我的代码很快变得很大而且很难阅读,无论我如何努力记录和构建它。

这让我得出结论,我试图通过使用错误的工具来解决这个任务(更不用说对于这样复杂的任务来说太愚蠢了:)),但我不知道我应该尝试什么。目前我有两个未经测试的想法,一个是使用某种 DSL(我绝对没有这方面的经验,所以我可能完全错了),另一个是编写某种类似于二进制正则表达式的工具来进行操作码匹配。

我希望有人能指出我正确的方向,谢谢。

最佳答案

我猜你的一些规则太低级了,这就是为什么它们变得难以管理。

认识 lui其次是 addiu作为 32 位恒定负载当然看起来非常合理;但是试图从单个操作码级别的分支指令派生控制流似乎更令人怀疑 - 我认为您想在那里使用基本块。

Cifuentes' Reverse Compilation Techniques是我见过的反编译讨论中不断出现的引用;从相当简短的浏览来看,似乎值得花一些时间详细阅读您的项目。

一些特定于 x86 的东西将不相关 - 特别是,将 x86 转换为低级中间表示的步骤对于 MIPS 可能不是必需的(MIPS 本质上只是每个操作码的一个基本操作) - 但除此之外还有很多的内容看起来应该非常有用。

关于mips - 寻找一种定义反编译器规则的好方法,需要建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331430/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com