在dex代码中(例如,由dexdump工具生成),对于每个方法定义,除了其他元数据(如“寄存器”,“insns size”)之外,我还会看到“ins”和“outs”。
我正在使用dex代码来引入新的寄存器。仪器失败,我怀疑我可能必须根据我添加的新寄存器的数量更改“ins”和“out”值。
所以我的问题是:那些“ins”和“out”代表什么?
(fyi:我正在使用dexlib2。)
答案 0 :(得分:4)
这些字段记录在http://source.android.com/devices/tech/dalvik/dex-format.html。
ins_size |此代码所用方法的传入参数的字数
outs_size |此代码用于方法调用所需的传出参数空间的单词数
ins_size主要是不言自明的 - 它是存储方法参数所需的32位字的数量(包括非静态方法的隐式" this"参数)。所有论点都需要1" word"除了longs(J)和double(D),需要2个单词。
out_size基本上相反。必须将outs_size设置得足够大,以保存方法中发生的任何方法调用的参数。如果您想要检测dex文件而不必担心这样的细节,您可以考虑使用dexlib2(为smali / baksmali开发和使用的库来读取/写入dex文件)。该库可在maven repository中找到,因此如果您使用的是gradle / mvn,则很容易链接。