如何获得直接调用的结果?

时间:2017-04-28 02:19:35

标签: reverse-engineering bytecode smali

  1. 我试图了解以下smali代码中发生的事情:
  2. 我正在尝试将结果或存储的值记录在密钥中:

  3. # 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;
    

1 个答案:

答案 0 :(得分:2)

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