3

dex コード (たとえば、dexdump ツールによって生成される) では、メソッド定義ごとに、「レジスタ」、「insns サイズ」などの他のメタデータに加えて、「ins」と「outs」が表示されます。

新しいレジスタを導入するために dex コードを計測しています。インストルメンテーションが失敗しています。追加した新しいレジスタの数に基づいて、"ins" と "outs" の値を変更する必要があるのではないかと思います。

私の質問は、これらの「イン」と「アウト」は何を表しているのでしょうか?

(fyi:これにはdexlib2を使用しています。)

4

1 に答える 1

4

これらのフィールドはhttp://source.android.com/devices/tech/dalvik/dex-format.htmlに記載されています。

ins_size | このコードが対象とするメソッドへの受信引数のワード数

outs_size | このコードがメソッド呼び出しに必要とする発信引数スペースのワード数

ins_size はほとんど一目瞭然です。これは、メソッド引数を格納するために必要な 32 ビット ワードの数です (非静的メソッドの暗黙の「this」引数を含む)。long (J) と double (D) を除き、すべての引数には 1 つの「単語」が必要です。ただし、2 つの単語が必要です。

outs_size 基本的に反対です。outs_size は、メソッド内で発生するメソッド呼び出しの引数を保持するのに十分な大きさに設定する必要があります。

このような詳細を気にせずに dex ファイルを計測したい場合は、dexlib2 (smali/baksmali によって開発され、dex ファイルを読み書きするために使用されるライブラリ) の使用を検討してください。ライブラリはmaven リポジトリで利用できるため、gradle/mvn を使用している場合は簡単にリンクできます。

于 2014-12-04T00:23:40.320 に答える