android-Dalvik字节码中的“输入”和“输出”是什么?

在dex代码中(例如,由dexdump工具生成),除了其他元数据(例如“寄存器”,“ insns大小”)外,对于每个方法定义,我还看到“输入”和“输出”.

我正在检测dex代码以引入新的寄存器.检测失败,我怀疑我可能必须根据我添加的新寄存器的数量来更改“输入”和“输出”值.

所以我的问题是:“进”和“出”分别代表什么?

(仅供参考:我正在为此使用dexlib2.)

解决方法:

这些字段记录在http://source.android.com/devices/tech/dalvik/dex-format.html.

ins_size | the number of words of incoming arguments to the method that this code is for

outs_size | the number of words of outgoing argument space required by this code for method invocation

ins_size大多是不言而喻的-它是存储方法参数(包括非静态方法的隐式“ this”参数)所需的32位字数.除长数(J)和双精度数(D)之外,所有自变量均需要1个“单词”,而后者需要2个单词.

outs_size基本上相反.必须将outs_size设置得足够大,以容纳该方法内发生的任何方法调用的参数.

如果您想要检测一个dex文件而不必担心这样的细节,则可以考虑使用dexlib2(由smali / baksmali开发并用于dex文件读写的库).该库在maven repository中可用,因此如果使用gradle / mvn,则很容易进行链接.

上一篇:一个简单的安卓游戏内购破解


下一篇:2.序列的相加