#1 楼
这些术语当前在此站点上定义如下:反汇编程序:可读的助记符表示形式,称为汇编语言。
调试器:
调试器允许用户查看和更改程序的运行状态。 />
反编译器:
用于还原编译过程的软件。反编译器将
二进制程序文件作为输入,并输出以结构化高级语言表示的相同程序。
评论
好。我至少了解反编译器,但我仍然不了解反汇编器和调试器之间的区别。我看到了一些有关REing的教程,发现这些家伙正在逐步汇编代码(在反汇编程序中)。在这种情况下,代码是否没有运行?那么,这与调试器有何不同?
– Pervy圣人
2014年6月18日19:23在
调试器包含一个反汇编程序,以便您可以看到逐步执行的反汇编代码。但是,并非所有的反汇编程序工具都包含实时调试功能。
–詹森·格夫纳(Jason Geffner)
2014年6月18日19:29
#2 楼
我想添加以下定义以避免任何疑问:反编译器在一个非常重要的方面与反编译器不同。两者都生成
人类可读的文本,而反编译器生成更高级别的文本,这些文本更简洁,更容易阅读。 doc
结论:与反汇编程序相比,反编译器可以缓解这两个问题:它们的输出较短且重复性较低。
评论
尚未提及的反汇编与反编译之间的主要区别在于反汇编是确定性的。每条机器代码指令都将恰好反汇编为一条汇编程序指令(在这里我不会提及数据/代码二分法,这是一种停机问题)。另一方面,在反编译时,可以将一条指令翻译成许多表达式,反之,可以将任何数量的指令收集到一个高级表达式中,这全由反编译器决定。不同的反编译器可能会产生不同的结果。
–杂件
16年12月12日在15:05
如果您正在寻找简单/简单的答案:反汇编程序是一种将二进制文件转换为低级语言/助记符/汇编的工具,而反编译器会将二进制文件转换为(从理论上来说,不是)其主要高级语言用于编码此二进制文件。这意味着不是每个二进制文件都可以反编译,而是可以反汇编每个二进制文件。例如,.NET程序集和JAVA文件一旦反编译,就可以转换为它们的原始C#/ Java代码。
– Soufiane Tahiri
16 Dec 12'在15:57
评论
相关:reverseengineering.stackexchange.com/questions/311