首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写ARRAY_PAYLOAD指令

重写ARRAY_PAYLOAD指令
EN

Stack Overflow用户
提问于 2017-04-20 14:31:57
回答 1查看 154关注 0票数 0

我试图找到一种方法来重写数组初始化中使用的即时性。

例如,这个Java代码:

代码语言:javascript
复制
package my;

public class Test {
    public static final int[] SomeArray = { 10, 20, 30 };
}

生成以下smali (不相关部分省略):

代码语言:javascript
复制
# direct methods
.method static constructor <clinit>()V
    .locals 1

    .prologue
    .line 4
    const/4 v0, 0x3

    new-array v0, v0, [I

    fill-array-data v0, :array_0

    sput-object v0, Lmy/Test;->SomeArray:[I

    return-void

    nop

    :array_0
    .array-data 4
        0xa
        0x14
        0x1e
    .end array-data
.end method

我想将即时值更改为100,200,300 (适当)。

array-data元素有一个ARRAY_PAYLOAD操作码,在smali中表示为DexBackedArrayPayload类的一个实例。指令重写器过滤实例 of ReferenceInstruction,而且由于DexBackedArrayPayload不是ReferenceInstruction的实例,所以没有现成的支持。

我想创建(并返回) DexBackedArrayPayload的新实例,但正如它的名称所描述的那样--直接从dex文件中读取数组元素。

还有其他解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 18:31:59

好的,你所看到的重写内容的一般思想是为你感兴趣的事情提供你自己的子类,并重写重写方法。不管你想做什么。

在本例中,听起来像是要创建并返回一个具有自己的数值常量的新ImmutableArrayDataPayload。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43522466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档