1

我现在正在考虑开发一个反汇编程序,但是我知道构建一个反汇编程序非常困难,我想知道最好/最简单的语言来将我的梦想变成现实,此外,教程建议也非常好;- )

4

9 回答 9

6

New Jersey Machine-Code Toolkit是用于创建汇编器和反汇编器的工具包和语言。我相信它支持 C、C++ 和 Modula-3。工具包的基础是描述指令集的语言;-dis然后使用该选项自动生成反汇编程序。该工具包已被广泛使用,但流行指令集的描述并未涵盖最近的修订。

您可能会认为自己编写更有趣或更具有指导意义,但如果您正在处理复杂的指令集,您可能很难与 Toolkit 的效率相匹配。这在今天的硬件上并不重要:-)

于 2010-01-07T00:55:46.850 回答
3

我建议看一下使用Python编写反汇编程序。它具有在编写反汇编程序时非常方便的特性和功能。

  • 位操作:逻辑运算符对整数值的所有位执行操作
  • 函数式编程:对位掩码操作的结果使用“映射”会很方便
  • 强大的文件读取操作:文件 I/O 在 Python 中很容易做到
  • 读取结构化二进制文件(如 .EXE 文件)的出色功能

Python 具有其他特性,使其对任何规模的程序都非常有用。与原始 8086 指令集相反,支持当前微处理器指令集的 x86 汇编器将是一个大型程序。

在编写汇编程序时,拥有一种易于进行位掩码的语言非常有用。

  • 面向对象:使代码重用更容易,程序更易于理解,冗余更少
  • 模块化:模块甚至包可用于将程序块保持在可管理的大小
  • 简洁易读:没有太多的打字或挠头
  • 交互式:使增量开发/测试更容易
  • 内置的符号调试器:当自动化测试不削减它时很方便
  • 现代 QA 支持:unittest类似于 JUnit,doctest通过示例支持功能测试
  • 内置帮助:因此您不必翻书或启动浏览器
  • 很棒的文档:PDF 和 HTML 文件格式的参考和教程材料
  • 良好的 IDE 支持:Eclipse、NetBeans、Emacs 等都对 Python 提供了极好的支持
  • 对服务网页的良好支持:包括对 HTML/HTTP 和出色的第 3 方 Web 框架的支持
  • 出色的文档生成:使用文档字符串约定来记录模块、类和方法,Python 附带的实用程序将动态生成超链接 HTML 文档并提供给您从 TCP/IP 端口浏览

Python 让您有机会在开发程序时享受程序的乐趣。那里有一个相当大的 Python 程序员社区。他们不像 Java 程序员和过去的 C++ 程序员那样成群结队,但周围有很多。

Python 因其强大的功能和灵活性而成为谷歌、雅虎和其他现代网络公司的流行编程语言。Jython python-in-java 解释器赋予这两种语言更多的功能,因为它们之间有高度的协同作用和良好的兼容性。如果您不喜欢阅读,可以收听一个Jython 播客。

Python 是在 1990 年代初发明的,比 Java 还要古老。它存在了这么久,拥有强大、稳定的追随者,它已经发展成为一种非常强大、有能力的语言,有很多例子和一个体面的程序员社区,他们用它来工作和娱乐。

如果您遇到困难,Python 社区通常会提供非常有用的想法,帮助您解决使用一两个方便的 Python 功能时遇到的问题。

于 2010-02-07T22:31:10.687 回答
2

任何具有良好字节和字符串操作的通用语言都可以做到这一点。使用您已经熟悉的语言。同时学习一门新语言和学习如何编写反汇编程序可能只会让你自己更难。

于 2010-01-06T21:58:57.220 回答
2

你可以用汇编写它。这真的会拉伸你的大脑。

真正的原始代码 - 没有替代品

于 2010-01-06T22:05:44.567 回答
1

我想任何现代语言都可以同样适用于此目的。考虑您要使用哪些库。例如,有一些库允许您处理不同类型的二进制文件(其中之一是BFD)。考虑一下并选择最适合您的编程语言。

于 2010-01-06T21:59:41.003 回答
1

反汇编程序,即将绝对二进制转换回汇编语言的程序,实际上很容易构建,尽管非常乏味。

早在 1983 年初,我就在 FORTRAN 77 中做了一个 Z8002 反汇编程序。我在 1991 年做了一个小型反汇编程序,用于我在 C 中没有谈论的东西。

您可能最好在 vanilla C 中执行此操作,因为您将要做的只是读取记忆字(或二进制文件)并打印大量固定文本字符串。

于 2010-01-06T22:00:30.537 回答
1

真的没关系;我认为 IDA Pro 有一个插件模型。我认为有些人有支持 Python 插件的反汇编器,所以你可以尝试一下。但我认为你不知道这会有多困难。祝你好运

于 2010-01-06T21:58:14.917 回答
1

我最近用 Python 写了一个反汇编程序。它适用于嵌入式 RISC 架构,Python 运行良好。我边走边学 Python,所以我最终几乎重写了我写过的每个函数和类,至少一次。我发现将类型子类化long并编写成员函数特别有用,这些函数给了我一个 4 字节字(或双字,取决于你问谁)以各种形式表达,例如返回位、字节、半字节或半字节的列表- 用于各种操作数操作的单词。

于 2010-03-23T03:02:45.113 回答
1

它在 Haskell 中运行得相当好。您可以使用二进制包,它也会很有效。ADT 相当不错。

我建议不要用 Python 编写它。Python 很慢,虽然 Haskell 可能比 C 慢几倍,但我想 Python 会比 C 慢很多倍。

最终,二进制格式足够低级,我怀疑它是否重要。你可以相对容易地用 C 语言编写它。不需要解析器组合器或解析器生成器。

于 2018-10-29T19:15:46.110 回答