2

我正在尝试使用 smali 执行以下操作:

  1. 将私有实例ArrayList字段添加到类
  2. 在类的构造函数中实例化实例字段
  3. add在类的方法之一中对字段进行操作。

这些是相关的代码片段。(我的班级名称是com.mypackage.MyClass(即com/mypackage/MyClass))

# instance fieldssmali 代码部分,我添加了该行

.field private myList:Ljava/util/List;

在公共构造方法(.method public constructor <init>()V)中,我添加了这些行

new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
iput-object v1, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;

最后,在我想要执行add方法调用的实例方法中,我添加了这些行

iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;
invoke-interface {v6, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
invoke-interface {v6, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z

然而,线

iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;

给我错误(根据logcat)

10-29 15:47:58.999: W/dalvikvm(518): VFY: 'this' arg 'Ljava/util/List;' not instance of 'Lcom/mypackage/MyClass;'

我将我所做的与在同一方法中的类似方法调用进行了比较,但无法找出问题所在。

任何想法?

谢谢!

4

1 回答 1

2

p0 寄存器包含方法进入时的“this”引用,但之后任何东西都可以修改它。根据该错误消息,看起来 p0 regsiter 在 iget-object 所在的位置有一个 List 对象。

于 2012-10-29T08:45:28.537 回答