使用最佳/最简单的语言进行拆卸

时间:2010-01-06 21:55:18

标签: programming-languages hex disassembly

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

9 个答案:

答案 0 :(得分:6)

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

您可能认为自己滚动更有趣或更具指导性,但如果您正在处理复杂的指令集,则可能难以匹配工具包的效率。在今天的硬件上并不重要: - )

答案 1 :(得分:3)

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

  • bit-manipulation:逻辑operators对整数值的所有位执行操作
  • functional programming:在位掩码操作的结果上使用'map'可以很方便
  • 强大的文件读取操作:文件I / O在Python中很容易实现
  • 阅读结构化二进制文件(如.EXE文件)的良好功能

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

在编写汇编程序时,使用一种易于执行bit-masking的语言非常有用。

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

Python让您有机会在开发程序时享受程序的乐趣。那里有一个非常庞大的Python程序员社区。他们不像Java程序员那样和C ++程序员一样,但是周围有很多。

由于其强大的功能和灵活性,Python是谷歌,雅虎和其他现代网络公司的一种流行编程语言。 Jython python-in-java解释器为这两种语言赋予了更多的权力,因为它们之间存在高度的协同作用和相当的兼容性。如果您不喜欢阅读,可以听Jython podcast

Python是在1990年代初发明的,它比Java更老。存在这么久,有着强大而稳定的追随者,它已经演变成一种非常坚固,有能力的语言,有许多例子和一个体面的程序员社区,他们将它用于工作和娱乐。

如果您遇到困难,Python社区通常会非常乐于帮助您了解如何使用一两个方便的Python功能来解决您遇到的问题。

答案 2 :(得分:2)

具有正常字节和字符串操作的任何通用语言都可以执行此操作。使用您熟悉的语言。学习一门新语言并学习如何同时编写一个反汇编程序可能只会让你自己变得更难。

答案 3 :(得分:2)

您可以在Assembly中编写它。这将真正拉伸你的大脑。

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

反汇编程序,即将绝对二进制文件转换回汇编语言的程序,实际上很容易构建,虽然非常繁琐。

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

你最好不要在vanilla C中这样做,因为你要做的就是读取记忆单词(或二进制文件)并打印大量的固定文本字符串。

答案 7 :(得分:1)

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

答案 8 :(得分:1)

在Haskell中可以很好地工作。您可以使用binary软件包,它也将非常有效。 ADT非常好。

我建议反对用Python编写。 Python相当慢,虽然Haskell可能比C慢几倍,但我想Python比C慢了许多。

最终,二进制格式足够底层,以至于我怀疑它是否重要。您可以相对轻松地用C编写它。不需要解析器组合器或解析器生成器。