2016-09-04 30 views
2

雖然在尋找一個DEX文件,我注意到,在每個code_item相關debug_info_item,有可能有:塞米鬆DEBUG_INFO格式

  • 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

參數寄存器都是隱式本地化的,所以你可以有一個DBG_END_LOCAL沒有DBG_START_LOCAL作爲參數寄存器。在DBG_START_LOCAL爲「現有」本地的情況下,我會想象你只是隱式地結束以前的本地並開始新的本地。

但請記住,調試信息僅供參考。沒有任何證據證明它的結構是正確的,或者甚至是有意義的。例如混淆器可能會添加無意義的調試信息,而不會導致dex文件在使用時無法驗證失敗。

例如,我最近的fixed a bug in baksmali與開始/結束當地人相關的寄存器值超出了該方法的範圍。