-10

在学习逆向工程时,我了解到汇编是查看和攻击闭源软件的最佳方式。为什么像 C/C++ 这样的语言需要将代码转换为汇编,为什么它不直接转换为机器语言。

其次,为什么每次都需要在同一位置(虚拟)映射所有代码段(如 .stack、.bss)?

4

2 回答 2

4

一些编译器,例如即时编译器,会输出机器代码。但总的来说,通过检查汇编语言而不是机器代码来调试编译器要容易得多。在某种程度上,这是向现有工具等添加另一层的“unix方式”。在这种情况下,目标平台需要存在汇编器和链接器,希望这是一个可以理解的论点。然后您可以简单地生成汇编语言并对其进行可视化调试,并使用现有的汇编器和链接器将其转换为可用的机器代码。

于 2013-07-17T12:46:00.117 回答
3

在这种情况下,“汇编程序”只是机器代码的“人类可读形式”。C 和 C++ 编译器通常会生成机器代码,但人类很难阅读二进制代码(即使它以更易读的 Hex 或 Octal 形式呈现,也很难“翻译”)。

于 2013-07-17T12:34:37.510 回答