为什么编译器使用间接跳转指令转换为汇编?

时间:2014-01-21 08:41:03

标签: assembly compiler-construction reverse-engineering disassembly

为什么编译器使用间接跳转指令将代码转换为汇编x86? 例如:

.
jmp eax

jmp [eax*4+ebx]

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

请举例说明。 谢谢。

1 个答案:

答案 0 :(得分:3)

如果你有一个很大的开关语句,如:

  

开关(表达式)
  {
          案例0:{做某事;打破;}
          案例1:{break;}
          案例2:{做别的事;}           案例3:{做事;打破;}
          默认:{做大多数情况下的事情;打破;}
          案例255:{和现在完全不同的东西;}
  }

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