我听说过像IDA这样的反汇编程序和OllyDbg这样的调试器,但是老实说,当您给它们两个都提供二进制文件时,它就给了我汇编代码。我知道反编译器会在您提供二进制文件的情况下提供源代码。但是,我不知道它们在操作模式方面有何不同,我问自己一个问题,例如“为什么可以反编译android / python代码而只反汇编C代码?”给出这三种工具之间的确切区别?

评论

相关:reverseengineering.stackexchange.com/questions/311

#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