smali 문장에서 sget과 sput

3633 단어
sput는 정적 필드 쓰기 작업이고 sget은 정적 필드 읽기 작업입니다.iput와 iget은 일반 필드에 직면합니다.
smali 코드:
sget-object v0, Lcom/disney/Class1;->PREFS_INSTALLATION_ID:Ljava/lang/String;

위에서 sget-object 명령은 PREFSINSTALLATION_ID 이 String 구성원 변수를 가져와 v0 레지스터에 넣습니다.
iget-object v0, p0, Lcom/disney/Class1;->_view:Lcom/disney/Class2;

앞의 iget-object 명령은 sget-object보다 하나의 매개 변수 p0이 많다. 바로 이 변수가 있는 클래스의 실례이다. 여기서 p0은'this'이다.
put 명령의 사용과 get 명령은 일치합니다. 예시:
const/4 v3, 0x0
sput-object v3, Lcom/disney/Class1;->globalIapHandler:Lcom/disney/config/GlobalPurchaseHandler;

앞의 문장은 Class1과 같다.globalIapHandler = null;

Smali 구성원 변수 명령 간략 분석


1.sget-object v0, Lcom/aaa;->ID:Ljava/lang/String;


sget-object는 변수 값을 가져와 연결된 매개 변수에 저장하는 레지스터입니다 이 예에서는 ID라는 String 유형의 구성원 변수를 가져와 v0 레지스터에 넣습니다.
주의: 앞에는 이 변수가 속하는 클래스의 유형이 필요하고, 뒤에는 사칭과 이 구성원 변수의 유형이 필요합니다. 중간에는 '->' 이 속하는 관계를 나타냅니다.

2.iget-object v0, p0, Lcom/aaa;->view:Lcom/aaa/view;


iget-object 명령이 sget-object보다 하나의 인자가 더 많은 것을 볼 수 있다. 바로 이 변수가 있는 클래스의 실례이다. 여기서 p0인'this'가 나온다.

3.sput 명령어 사용


const/4 v3, 0x0
sput-object v3, Lcom/aaa;->timer:Lcom/aaa/timer;
this.timer=null

4.iput 명령어 사용


.local v0, args:Landroid/os/Message;
const/4 v1, 0x12
iput v1, v0, Landroid/os/Message;->what:I
args.what = 18;
# instance fields에서 인스턴스 변수의 태그를 정의합니다.
# static fields 정적 변수의 태그 정의
# direct methods 클래스 직계 방법(사용자 정의)의 태그 정의
# virtual methods 클래스 비직계(상속 재부팅 등) 태그 정의
const-string v7, "Launcher"문자열 상수 v7에 Launcher에 값 지정
new-instance v6,L java/lang/StringBuilder; StringBuilder 객체 인스턴스화
input-boolean v6, p0, L com/android/launcher2/Launcher;->mPermanentMenuKey:Z
p0은 이 대상의this를 나타내고 v6는 변수(레지스터 중치)를 나타낸다. 이 명령은 자바 명령으로 v6 값을 mPermanentMenuKey에 부여하고 다음은 자바 코드이다.
(this.)mPermanentMenuKey =  v6;
iget-object v6, p0, L com/android/launcher2/Launcher;->mModel:Lcom/android/launcher2/LauncherModel;
p0은 이 대상this를 대표하고 v6는 변수를 대표하며 이 명령은java가po를 실현한다.(this.)mModel은 v6에 값을 부여하고 다음은 자바 코드입니다
v6 = (this.)mModel;
invoke-super {p0,p1},Landroid/app/ActivityGroup;->onCreate(Landroid/os/Bundle;)V
p0은 이 대상this,p1을 방법 매개 변수,java 코드를 대표한다
super.onCreate(Bundle p1);  (p1=insavestance)
invoke-virtual {p0},Lcom/android/Launcher2/Launcher;_>getApplication()L android/app/Application;
p0은 이 대상this,java 코드를 대표한다: (this.)getApplication();
invoke-interface {v3,v6,v9},Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
java 구현 코드: v3.getBoolean(v6,v9);
move-result-object v0은 이전 명령의 결과를 v0에 부여합니다
check-cast v0,Lcom/android/Launcher2/launcherApplication;
v0 유형을 LauncherApplication으로 정의
if-nez p1,  :cond_2
p1이null이 아니면 cond 실행2 코드 블록
 
return-void에 반환 값이 없습니다.

좋은 웹페이지 즐겨찾기