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

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

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

(仅供引用:我为此使用了 dexlib2。)

最佳答案

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

ins_size 主要是不言自明的 - 它是存储方法参数所需的 32 位字的数量(包括隐式“this”参数,对于非静态方法)。除了 longs (J) 和 doubles (D) 需要 2 个单词之外,所有参数都需要 1 个“单词”。
outs_size 基本相反。 outs_size 必须设置得足够大以容纳方法中发生的任何方法调用的参数。
如果你想检测一个 dex 文件而不必担心这样的细节,你可以考虑使用 dexlib2(为 smali/baksmali 开发和使用的库,用于读/写 dex 文件)。该库在 maven repository 中可用,因此如果您使用 gradle/mvn,则很容易链接。

关于android - Dalvik 字节码中的 "ins"和 "outs"是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27283156/

10-12 02:02