为什么首先在汇编中转换代码很重要?

时间:2013-07-17 12:29:29

标签: assembly compiler-construction kernel

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

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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