打包交换机如何在Android上作为smalto由apktool生成?

前端之家收集整理的这篇文章主要介绍了打包交换机如何在Android上作为smalto由apktool生成?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用apktool d对apk进行反向工程,并且它生成的smali包含我不完全理解的packed-switch语句.一种方法包含:

packed-switch v0,:pswitch_data_0

随后在代码中使用以下标签:pswitch_X
其中X是一个数字,在方法的最后:

:pswitch_data_0
.packed-switch 0x7f060395
    :pswitch_4
    :pswitch_5
    :pswitch_1
.end packed-switch

这到底是做什么的?它看起来像要跳转到的地方列表,但在什么条件下?它与0x7f060395有什么关系?

@H_404_11@

解决方法

正如您所注意到的,开关分为两部分.您列出的第二部分是有效负载伪指令,其中包含所有切换案例.第一部分是打包切换指令,它定义包含要检查的值的寄存器,并使用标签引用有效负载指令.

对于打包交换机,有效负载伪指令中的大小写值是顺序的,只有第一个值实际给出(在本例中为0x7f060395)

具体而言,对于您的示例,当执行packed-switch指令时,它将检查v0寄存器的值与有效负载中的3种情况.如果值为0x7f060395,则跳转到:pswitch_4,如果为0x7f060396,则跳转到:pswitch_5等.

如果寄存器的值与任何情况都不匹配,则执行将继续执行打包切换指令之后的下一条指令(具有寄存器和标签的指令,而不是有效负载伪指令).

稀疏切换指令类似,只是其有效负载指令具有与每种情况相关联的显式值,而不是使用顺序键值.

您可以在dalvik-bytecode文档中找到所有细节.

@H_404_11@ @H_404_11@

猜你在找的Android相关文章