我现在正在考虑开发一个反汇编程序,但是我知道构建反汇编程序非常困难,我想知道将我的梦想变为现实的最佳/最简单的语言,同时,教程建议非常好也; - )
答案 0 :(得分:6)
New Jersey Machine-Code Toolkit是一个工具包和用于创建汇编器和反汇编器的语言。我相信它支持C,C ++和Modula-3。工具包的基础是用于描述指令集的语言;然后使用-dis
选项自动生成反汇编程序。此工具包已被广泛使用,但流行指令集的描述不包括最近的修订。
您可能认为自己滚动更有趣或更具指导性,但如果您正在处理复杂的指令集,则可能难以匹配工具包的效率。在今天的硬件上并不重要: - )
答案 1 :(得分:3)
我建议您使用Python来编写反汇编程序。它具有在编写反汇编程序时非常方便的特性和功能。
Python具有其他特性,使其对任何大小的程序都非常有用。支持当前微处理器指令集而不是原始8086指令集的x86汇编程序将是一个大型程序。
在编写汇编程序时,使用一种易于执行bit-masking的语言非常有用。
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编写它。不需要解析器组合器或解析器生成器。