【问题标题】:Why does the compiler for translate to assembly the use of indirect jump instructions?为什么编译器要使用间接跳转指令翻译成汇编?
【发布时间】:2014-02-10 17:54:36
【问题描述】:

为什么编译器使用间接跳转指令将代码转换为程序集x86? 示例:

.
jmp eax

jmp [eax*4+ebx]

以及哪些编译器使用间接跳转? 以及我们如何才能实现间接跳转的最终目标?

请举例说明。 谢谢。

【问题讨论】:

  • 也许只是我累了,但我觉得你的问题有点难以理解。您能否提供一个更具体的示例和/或解释为什么这对您很重要?
  • 用于在编译器生成的汇编代码中绘制CFG图。
  • 为什么你觉得需要使用间接跳转。你认为间接跳跃会给你什么其他形式没有的东西?您可能需要手动组装。

标签: assembly compiler-construction reverse-engineering disassembly


【解决方案1】:

如果你有一个大的 switch 语句,比如:

开关(表达式)
{
案例0:{做某事;休息;}
案例 1:{break;}
案例 2:{做其他事情;}
案例3:{做事;休息;}
默认值:{在大多数情况下做事;休息;}
案例 255:{现在是完全不同的东西;}
}

编译器可能会使用间接跳转来实现它。但是,如果 switch 语句足够简单,或者不适合跳转表,编译器可能会改为使用多个分支。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2013-10-09
    • 2015-01-13
    • 2018-12-05
    相关资源
    最近更新 更多