【问题标题】:How do I get result of invoke direct?如何获得直接调用的结果?
【发布时间】:2017-04-28 15:55:44
【问题描述】:
  1. 我正在尝试了解以下 smali 代码中发生的情况:
  2. 我正在尝试在键中记录结果或存储值:


# creates new instance of SecretKeySpec in register v8
new-instance v8, Ljavax/crypto/spec/SecretKeySpec;

# store contant 0x0 in v0
const/4 v0, 0x0
aget-object v0, v9, v0

# store string AES in v1
const-string v1, "AES"

# calls new SecretKeySpec(v0,v1);
invoke-direct {v8, v0, v1}, Ljavax/crypto/spec/SecretKeySpec;-><init>([BLjava/lang/String;)V

.line 115
.local v8, "key":Ljavax/crypto/spec/SecretKeySpec;

【问题讨论】:

    标签: reverse-engineering bytecode smali


    【解决方案1】:

    invoke-direct 调用是调用构造函数。 Java(和 Dalvik)字节码中的对象创建需要两条指令。首先,new-instance 分配一个未初始化的对象,而invoke-direct 调用构造函数来初始化这个对象。该对象存储在 v8 中,您可以从 new-instance 指令中看到。

    【讨论】:

    • 行“.local v8,”key“:Ljavax/crypto/spec/SecretKeySpec;”生成自?
    • 那是调试信息,用来让调试器知道原始j​​ava源码中哪个寄存器保存了哪个变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多