Dex debug_info格式

时间:2016-09-04 16:33:33

标签: java android bytecode dalvik dex

在查看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_LOCALDBG_END_LOCAL指令仅为地址范围内的指令定义调试名称,超出该范围的jump指令会使名称消失,即使指令指针不会通过DBG_END_LOCAL
  • 指向的地址
  • 寄存器仅用于一个变量,并且同一函数内的同一寄存器不应该是不同的调试名称

1 个答案:

答案 0 :(得分:1)

参数寄存器都是隐式的本地,因此您可以为参数寄存器设置DBG_END_LOCAL而不使用DBG_START_LOCAL。对于"现有"的DBG_START_LOCAL;本地,我想你只是隐含地结束了以前的本地并启动了新的本地。

但请记住,调试信息仅供参考。没有什么可以证明它的结构是正确的,或者甚至是有意义的。例如混淆器可以添加无意义的调试信息,而不会导致dex文件在使用时失败验证。

例如,我最近fixed a bug in baksmali与该方法超出范围的寄存器值的开始/结束本地相关。