在查看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
答案 0 :(得分:1)
参数寄存器都是隐式的本地,因此您可以为参数寄存器设置DBG_END_LOCAL而不使用DBG_START_LOCAL。对于"现有"的DBG_START_LOCAL;本地,我想你只是隐含地结束了以前的本地并启动了新的本地。
但请记住,调试信息仅供参考。没有什么可以证明它的结构是正确的,或者甚至是有意义的。例如混淆器可以添加无意义的调试信息,而不会导致dex文件在使用时失败验证。
例如,我最近fixed a bug in baksmali与该方法超出范围的寄存器值的开始/结束本地相关。