Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 什么是「;ins";及;“出局”;用Dalvik字节码?_Android_Dalvik_Dex_Smali - Fatal编程技术网

Android 什么是「;ins";及;“出局”;用Dalvik字节码?

Android 什么是「;ins";及;“出局”;用Dalvik字节码?,android,dalvik,dex,smali,Android,Dalvik,Dex,Smali,在dex代码中(例如,由dexdump工具生成),对于每个方法定义,除了“寄存器”、“insns大小”等其他元数据外,我还看到了“ins”和“outs” 我正在检测dex代码以引入新的寄存器。检测失败,我怀疑我可能必须根据我添加的新寄存器的数量更改“IN”和“OUT”值 所以我的问题是:这些“入”和“出”代表什么 (仅供参考:我正在为此使用dexlib2。)这些字段记录在 ins_size |此代码用于的方法的传入参数的字数 outs_size |此代码调用方法所需的传出参数空间的字数 ins_

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

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

所以我的问题是:这些“入”和“出”代表什么


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

这些字段记录在

ins_size |此代码用于的方法的传入参数的字数

outs_size |此代码调用方法所需的传出参数空间的字数

ins_大小基本上是自解释的——它是存储方法参数(包括隐式“this”参数,对于非静态方法)所需的32位字数。除long(J)和double(D)需要2个单词外,所有参数都需要1个“单词”

我们的尺寸基本上是相反的。outs\U size必须设置得足够大,以容纳方法中发生的任何方法调用的参数


如果您想检测DEX文件,而不必担心这样的细节,您可以考虑使用(SMALI/BAKSMARI开发和使用的库来读取/写入DEX文件)。该库在中可用,因此如果您使用gradle/mvn,很容易链接到。

在Stackoverflow的超级用户中发布此问题:我正在使用dexlib2的MutableMethod实现进行检测。您不必担心输入和输出。当您写出新的dex文件时,dexlib2将适当地计算它们。您的问题可能在于,您所做的修改或类似的操作会对某些寄存器造成冲击。我建议在应用程序安装期间查看logcat,查看dalvik/art验证错误。