Assembly 为什么编译程序使用间接跳转指令来编译程序集?
为什么编译器使用间接跳转指令将代码翻译成汇编Assembly 为什么编译程序使用间接跳转指令来编译程序集?,assembly,compiler-construction,reverse-engineering,disassembly,Assembly,Compiler Construction,Reverse Engineering,Disassembly,为什么编译器使用间接跳转指令将代码翻译成汇编x86? 例如: . jmp eax 或 哪些编译器使用间接跳转? 我们如何实现间接跳跃的最终目标 请举例说明。 谢谢。如果您有一个大的switch语句,如: 开关(expr) { 案例0:{做点什么;打断;} 案例1:{break;} 案例2:{做点别的;} 案例3:{做事;休息;} 默认值:{在大多数情况下执行操作;中断;} 案例255:{现在是完全不同的;} } 编译器可以使用间接跳转来实现它。但是,如果switch语句足够简单,或者不太适合跳
x86
?
例如:
.
jmp eax
或
哪些编译器使用间接跳转?
我们如何实现间接跳跃的最终目标
请举例说明。
谢谢。如果您有一个大的switch语句,如: 开关(expr)
{
案例0:{做点什么;打断;}
案例1:{break;}
案例2:{做点别的;}
案例3:{做事;休息;}
默认值:{在大多数情况下执行操作;中断;}
案例255:{现在是完全不同的;}
}
编译器可以使用间接跳转来实现它。但是,如果switch语句足够简单,或者不太适合跳转表,编译器可能会使用多个分支。可能是我太累了,但我发现您的问题有点难以理解。你能提供一个更具体的例子和/或解释为什么这对你很重要吗?在编译器生成的汇编代码中绘制CFG图。为什么你觉得需要使用间接跳转。你认为间接跳转会给你什么,而其他形式不会?您可能需要在组装时手动完成此操作。
jmp [eax*4+ebx]