의미없는 블로그
[Android] Smali 기본 문법 본문
1) source.android.com/devices/tech/dalvik/dalvik-bytecode
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에 넣는다
'# 나 > nnobile (AOS, iOS)' 카테고리의 다른 글
[Android] Smali 코드 패치 (리패키징/사인) (0) | 2020.10.14 |
---|---|
[Android/iOS] Frida로 메모리 덤프 하기 (0) | 2020.10.14 |
[Android] 과제 (0) | 2020.10.07 |
[Android] 루팅 탐지 기법 / 루팅 탐지 우회 기법 (0) | 2020.10.06 |
[Android] 앱에서 burp 패킷 캡쳐 안될 때 (SSL Pinning 우회) (0) | 2020.09.22 |