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,则很容易进行链接.
标签:dalvik,smali,android,dex 来源: https://codeday.me/bug/20191028/1955879.html