170716 逆向-Smali文件信息及指令简析

本文深入解析Smali文件,包括包信息、内部类声明、寄存器使用以及成员变量的get和put指令。通过实例展示了如何获取和设置对象变量,并解释了在非静态和静态函数中参数寄存器的差异。明日计划将继续探讨安卓逆向知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1625-5 王子昂 总结《2017年7月16日》 【连续第287天总结】
A. Smali文件深入
B.
包信息:
  .class public Lcom/aaaaa;
  .super Lcom/bbbbb;
  .source “ccccc.java”
  意思为:
  这是一个由ccccc.java编译得到的smali文件
  它是com.aaaaa这个package下的一个类
  继承自com.bbbbb这个类
声明信息:
  #annotations
  .annotation system Ldalvik/annotation/MemberClasses;
  value={
  Lcom/aaa$qqq;
  Lcom/aaa$www;
  }
  .end annotation
  这个声明是一个内部类的声明:aaa这个类有两个成员内部类:qqq和www
寄存器:
  本地寄存器用v表示,如v0,v1,v2…
  参数寄存器用p表示,如p0,p1,p2…
  特别注意的是p0不一定是函数的第一个参数,在非static函数中,p0代表this,p1表示第一个参数;
  而在static函数中p0表示第一个参数(因为JAVA的static方法中没有this方法)
成员变量指令简析:
  sget-object v0,Lcom/aaa;->ID:Ljava/lang/String;
    sget-object就是用来获取这个变量值并保存到紧接着的参数的寄存器中
    本例中它获取ID这个string类型的成员变量并放入v0这个寄存器中
    注意:前面需要该变量所属的类的类型,后面加冒号和该成员变量的类型,中间->表示所属关系
  
  iget-object v0,p0,Lcom/aaa;->view:Lcom/aaa/view;
    可以看到iget-object比sget-object多一个参数,就是该变量所在类的实例,在这里就是p0,即this
    获取array的话则要使用aget和aget-object,指令和上述相同
  put指令的使用和get指令是统一的:
    const/4 v3,0x0
    sput-object v3,Lcom/aaa;->timer:Lcom/aaa/timer;
    相当于this.timer=null;
    注意:这里因为是赋值object所以是null,如果是boolean的话,则是False
  .local v0,args:Landroid/os/Message;
  const/4 v1,0x12
  iput v1,v0,Landroid/os/Message;->what:I
    相当于 args.what=18;(args是Message的实例)
C.明日计划
安卓逆向知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值