在 dex 代码中(例如,由 dexdump 工具生成),对于每个方法定义,除了“寄存器”、“insns 大小”等其他元数据之外,我还会看到“ins”和“outs”。
我正在检测 dex 代码以引入新的寄存器。仪器出现故障,我怀疑我可能必须根据我添加的新寄存器的数量来更改“输入”和“输出”值。
所以我的问题是:那些“进”和“出”代表什么?
(仅供参考:我为此使用 dexlib2。)
这些字段记录在http://source.android.com/devices/tech/dalvik/dex-format.html。
ins_size | 此代码所针对的方法的传入参数的字数
超大尺寸 | 此代码调用方法所需的传出参数空间的字数
ins_size 主要是不言自明的——它是存储方法参数(包括隐含的“this”参数,用于非静态方法)所需的 32 位字数。所有参数都需要 1 个“字”,除了 longs (J) 和 doubles (D),它们需要 2 个字。
outs_size 基本相反。outs_size 必须设置得足够大,以容纳方法中发生的任何方法调用的参数。
如果您想检测 dex 文件而不必担心此类细节,您可以考虑使用dexlib2(为 smali/baksmali 开发并用于读取/写入 dex 文件的库)。该库在maven 存储库中可用,因此如果您使用 gradle/mvn,则很容易链接。