【问题标题】:Why it is important to first convert code in assembly? [closed]为什么首先在汇编中转换代码很重要? [关闭]
【发布时间】:2013-07-16 00:10:03
【问题描述】:

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

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

【问题讨论】:

  • 它被转换为机器语言。您正在查看程序内存的反汇编结果。
  • +1。哦。这就是为什么汇编因反汇编程序而异。
  • 汇编语言也取决于处理器。因此汇编代码取决于处理器
  • 你在没有给出足够的上下文、解释和具体例子的情况下问了很多事情。还有谁说这些东西是“必要的”?
  • @jbat100:我在 Linux 的 /proc 数据结构中见过。

标签: assembly compiler-construction kernel


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 2010-10-21
      • 2010-10-25
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 2018-01-02
      相关资源
      最近更新 更多