在dex代碼中(例如,由dexdump工具生成的),除了其他元數據(如「寄存器」,「insns size」)之外,對於每個方法定義,我還會看到「ins」和「outs」。Dalvik字節碼中的「ins」和「outs」是什麼?
我正在使用dex代碼來引入新的寄存器。該儀器失敗,我懷疑我可能不得不根據我添加的新寄存器的數量來更改「插入」和「插入」值。
所以我的問題是:這些「ins」和「outs」代表什麼?
(供參考:我使用dexlib2這一點。)
在dex代碼中(例如,由dexdump工具生成的),除了其他元數據(如「寄存器」,「insns size」)之外,對於每個方法定義,我還會看到「ins」和「outs」。Dalvik字節碼中的「ins」和「outs」是什麼?
我正在使用dex代碼來引入新的寄存器。該儀器失敗,我懷疑我可能不得不根據我添加的新寄存器的數量來更改「插入」和「插入」值。
所以我的問題是:這些「ins」和「outs」代表什麼?
(供參考:我使用dexlib2這一點。)
這些字段是在http://source.android.com/devices/tech/dalvik/dex-format.html記錄。
ins_size |傳入參數的字數,以此代碼的方法爲
outs_size |此代碼調用方法所需的輸出參數空間的字數
ins_size大多是不言自明的 - 它是存儲方法參數所需的32位字的數量(包括隱含的「this」參數,對於非靜態方法)。除了長(J)和雙(D),所有參數都需要1個「單詞」,這需要2個單詞。
outs_size基本上相反。 outs_size必須設置得足夠大以容納方法中發生的任何方法調用的參數。
如果你想測試一個dex文件而不必擔心這樣的細節,你可以考慮使用dexlib2(爲smali/baksmali開發和使用的庫來讀/寫dex文件)。該庫可在maven repository中找到,因此如果您使用gradle/mvn,則很容易鏈接。
我正在使用dexlib2的MutableMethodImplementation來執行檢測。 – 2014-12-04 01:11:25
然後你不必擔心輸入和輸出。當您寫出新的dex文件時,dexlib2會適當地計算它們。你的問題可能在於你修改了一些註冊表,或者類似的東西。我建議在應用程序安裝期間查看logcat以查找任何達爾文/藝術驗證錯誤。 – JesusFreke 2014-12-04 08:58:37
在超級用戶的Stackoverflow中發佈此問題:D – Jorgesys 2014-12-03 22:53:59