Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

의미없는 블로그

[Android] Smali 기본 문법 본문

# 나/nnobile (AOS, iOS)

[Android] Smali 기본 문법

SaltLee 2020. 10. 8. 10:26

1) source.android.com/devices/tech/dalvik/dalvik-bytecode

2) hyeonbell.tistory.com/m/1

 

vA : 4비트 레지스터

vAA : 8비트 레지스터

vAAAA : 16비트 레지스터

 

move vA, vB : B레지스터의 값을 A레지스터에 넣는다

move-wide vA, vB : B레지스터 쌍의 값을 A레지스터의 쌍에 넣는다

move-object vA, vB : B레지스터의 값(객체 참조)을 A레지스터에 넣는다

move-result vA : 가장 최근 invoke 함수의 결과를 A레지스터에 넣는다

move-result-wide vA : 가장 최근 invoke 함수의 결과를 A레지스터 쌍에 넣는다

move-result-object vA : 가장 최근 invoke 함수 결과의 객체 참조값을 A레지스터에 넣는다

move-exception vA : 가장 최근 감지된 예외(객체 참조)를 A레지스터에 넣는다

 

return-void : void 메소드에서 리턴

return vA : A레지스터 값을 리턴

return-wide vA : A레지스터 쌍의 값을 리턴

return-object vA : A레지스터의 값(객체 참조)을 리턴

 

const vA B : B값(리터럴)을 A레지스터에 넣는다

const-wide vA B : B값(리터럴)을 A레지스터 쌍에 넣는다

const-string vA B : B값(문자열)의 참조를 A레지스터에 넣는다

const-class vA B : B값(클래스)의 참조를 A레지스터에 넣는다

 

invoke-virtual {vC, vD, vE, vF, vG}, B : virtual 메소드 B를 호출한다

invoke-super {vC, vD, vE, vF, vG}, B : 상위 클래스의 virtual 메소드 B를 호출한다

invoke-direct {vC, vD, vE, vF, vG}, B : direct 메소드 B를 호출한다

invoke-static {vC, vD, vE, vF, vG}, B : static 메소드 B를 호출한다

invoke-interface {vC, vD, vE, vF, vG}, B : interface 메소드 B를 호출한다

 

monitor-enter vA : vA에 참조된 객체의 모니터를 가져온다

monitor-exit vA : vA에 참조된 객체의 모니터를 해제한다

 

goto A : 무조건 A로 점프한다

throw vA : 예외 객체 참조 vA를 던진다

 

cmpl vA, vB, vC : vB가 vC 보다 작으면 vA에 -1을 리턴한다 (vB < vC)

cmpg vA, vB, vC : vB가 vC 보다 작으면 vA에 1을 리턴한다 (vB < vC)

cmp vA, vB, vC : vB가 vC와 같으면 0, vC 보다 작으면 -1, vC 보다 크면 1을 vA에 리턴한다

 

if-eq vA, vB, C : vA가 vB와 같으면 C로 점프한다 (vA = vB)

if-ne vA, vB, C : vA가 vB와 같지 않으면 C로 점프한다 (vA != vB)

if-lt vA, vB, C : vA가 vB 보다 작으면 C로 점프한다 (vA < vB)

if-ge vA, vB, C : vA가 vB 보다 크거나 같으면 C로 점프한다 (vA >= vB)

if-gt vA, vB, C : vA가 vB 보다 크면 C로 점프한다 (vA > vB)

if-le vA, vB, C : vA가 vB 보다 작거나 같으면 C로 점프한다 (vA <= vB)

 

if-eqz vA, B : vA가 0 이면 B로 점프한다 (vA = 0)

if-nez vA, B : vA가 0이 아니면 B로 점프한다 (vA != 0)

if-ltz vA, B : vA가 0 보다 작으면 B로 점프한다 (vA < 0)

if-gez vA, B : vA가 0 보다 크거나 같으면 B로 점프한다 (vA >= 0)

if-gtz vA, B : vA가 0 보다 크면 B로 점프한다 (vA > 0)

if-lez vA, B : vA가 0 보다 작거나 같으면 B로 점프한다 (vA <= 0)

 

aget vA, vB, vC : 배열 vB에서 식별된 색인 vC의 값을 vA로 가져온다

aput vA, vB, vC : vA의 값을 배열 vB의 식별된 색인 vC에 넣는다

iget vA, vB, C : vB의 인스턴스 필트 C를 vA로 가져온다

iput vA, vB, C : vA의 값을 vB의 인스터스 필드 C에 넣는다

sget vA, B : 정적 필드 B를 vA로 가져온다

sput vA, B : vA의 값을 정적 필드 B에 넣는다

 

add vA, vB, vC : vB+vC의 결과를 vA에 넣는다

sub vA, vB, vC : vB-vC의 결과를 vA에 넣는다

mul vA, vB, vC : vB*vC의 결과를 vA에 넣는다

div vA, vB, vC : vB/vC의 결과를 vA에 넣는다

rem vA, vB, vC : vB%vC의 결과를 vA에 넣는다

and vA, vB, vC : vB&vC의 결과를 vA에 넣는다

or vA, vB, vC : vB|vC의 결과를 vA에 넣는다

xor vA, vB, vC : vB^vC의 결과를 vA에 넣는다

shl vA, vB, vC : vB<<vC의 결과를 vA에 넣는다

shr vA, vB, vC : vB>>vC의 결과를 vA에 넣는다

ushr vA, vB, vC : vB>>>vC의 결과를 vA에 넣는다

Comments