在查看dex文件时,我注意到在与每个debug_info_item
相关联的code_item
中,可能有:
DBG_END_LOCAL
,没有任何在它之前具有相同寄存器的DBG_START_LOCAL
DBG_START_LOCAL
用于已定义并尚未关闭的已定义调试信息名称的寄存器(尽管这种情况很少发生)我不明白我该怎么分析这些案子。关于debug_info_item
格式(https://source.android.com/devices/tech/dalvik/dex-format.html),有什么我不理解的吗?
另外,为了确保,我是对的吗:
DBG_START_LOCAL
和DBG_END_LOCAL
指令仅为地址范围内的指令定义调试名称,超出该范围的jump
指令将使名称消失,即使指令指针没有通过DBG_END_LOCAL
指向的地址发布于 2016-09-04 18:20:34
参数寄存器都是隐式局部变量,因此可以为参数寄存器使用没有DBG_START_LOCAL的DBG_START_LOCAL。对于用于“现有”本地的DBG_START_LOCAL,我可以想象您只是隐式地结束了前一个本地并启动了新的本地。
但请记住,调试信息仅为信息。没有任何东西可以验证它的结构是否正确,甚至没有真正的意义。例如,混淆器可以添加无意义的调试信息,而不会导致dex文件在使用时失败验证。
例如,最近我的修复了巴斯马利的一个窃听器与开始/结束局部变量相关,注册值超出了该方法的范围。
https://stackoverflow.com/questions/39319126
复制相似问题