DVM:methodIdx

时间:2014-05-05 18:32:30

标签: android dalvik

在DVM源代码中,您可以看到在许多函数中用作方法ID的methodIdx。这个属性不在Method Class中,我没有找到关于它的好描述。

所以我的问题是,是一个绝对的标识符,它对于一个过程来说总是一样的,可以改变,什么时候可以改变等等......以及如何或在哪里生成。

由于

1 个答案:

答案 0 :(得分:4)

methodIdx通常是"方法参考索引"。

它是method_ids表中描述的dvmResolveMethod()表的索引。索引相对于单个DEX文件,这就是invoke-kind之类的函数接受引用类以及方法引用索引的原因。在Dalvik file format文档的method_id_item解释中提到了这一点。

每个method_id_item通过定义它的类以及函数的原型(名称,参数,返回类型)来标识方法。 DEX文件中声明或引用的每个方法都有一个dx。 DEX文件由methodIdx生成时建立索引。

所以... Method*会让你进入一个带有一串字符串的表条目。从那里开始,符号查找将引导您进入实际的方法实现,即dvmResolveMethod()。有关详细信息,请参阅bytecode中的invoke

由于{{1}}指令只有16位方法引用索引的空间,因此您无法在单个DEX文件中引用超过65535种方法。 (这是一个dalvik/vm/oo/Resolve.cpp问题。)