在 x86 二进制文件中,我们有时会找到类似 的语句jmp %eax
,其中jmp
目标eax
是在运行时计算的。这增加了构建静态控制流图的复杂性。我的问题是 dalvik 字节码中是否也有类似的指令?我的意思是是否有任何只能在运行时计算的分支目标?
我听说在 dalvik 中这是确定性的,这意味着分支目标不是在运行时确定的,而是编译器存储信息。
期待您的反馈,并在可能的情况下提供参考。
在 x86 二进制文件中,我们有时会找到类似 的语句jmp %eax
,其中jmp
目标eax
是在运行时计算的。这增加了构建静态控制流图的复杂性。我的问题是 dalvik 字节码中是否也有类似的指令?我的意思是是否有任何只能在运行时计算的分支目标?
我听说在 dalvik 中这是确定性的,这意味着分支目标不是在运行时确定的,而是编译器存储信息。
期待您的反馈,并在可能的情况下提供参考。
不,Dalivk字节码只允许固定跳转。没有等效的跳转寄存器;所有的跳跃都是精确的偏移。我没有给你的权威参考,但我昨天碰巧读了这个演示文稿,其中明确提到了这个限制。
上面链接的演示文稿还声称 Dalvik 对本机代码执行有一些支持,我假设它允许目标架构支持的任何类型的分支。但这与字节码无关。