Smali


  • Alt text
    这些标识符和后面的方法的返回值相配合
    Lpackage/name/ObjectName;->MethodName(III)Z
    在这个例子中,你应该识别出“ Lpackage/name/ObjectName; 是一个类, MethodName明显是一个方法名,(III)Z是方法的签名,‘III’在这个例子中是三个整形参数,Z是表示返回一个布尔类型的返回值。
    Alt text
    考虑一下 一个是整形 和字符型
    2、smali中的成员变量
    Alt text
    Alt text
    sget-object就是用来获取变量值并保存到紧接着的参数的寄存器中,在这里,把上面出现的PREFS_INSTALLATION_ID这个String成员变量获取并放到v0这个寄存器中,注意:前面需要该变量所属的类的类型,后面需要加一个冒号和该成员变量的类型,中间是“->”表示所属关系。

Alt text

需要注意的是 本地寄存器的话只是v0 v1 v2
而参数寄存器 有p0 p1 p2

0x1:
特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this”,p1表示函数的第一个参数,p2代表函数中的第二个参数…而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)

关于存放数据的寄存器需求
Alt text

关于函数:

在Java代码中调用函数和返回函数结果是一条语句完成的,而在smali里则需要分开来完成,在使用上述指令后,如果调用的函数返回非void,那么还需要用到move-result(返回基本数据类型)和move-result-object(返回对象)指令:

文章目录