티스토리 뷰

안드로이드의 APK파일은 APKTool을 통해 분해, 재조립을 할 수 있다.
안드로이드 기본 프로젝트를 디컴파일 해보면 다음과 같다.

java 코드
package com.atest;

import android.app.Activity;
import android.os.Bundle;

public class AtestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

smali코드
.class public Lcom/atest/AtestActivity;
.super Landroid/app/Activity;
.source "AtestActivity.java"

# direct methods
.method public constructor <init>()V
    .locals 0

    .prologue
    .line 7
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method

# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
    .locals 1
    .parameter "savedInstanceState"

    .prologue
    .line 11
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 12
    const/high16 v0, 0x7f03

    invoke-virtual {p0, v0}, Lcom/atest/AtestActivity;->setContentView(I)V

    .line 13
    return-void
.end method

1. 헤더 부분
1package와 import부분은 사라졌다. package는 class명과 smali폴더 계층에서 찾아볼 수 있다.
public class AtestActivity extends Activity가
.class와 .super로 변형된 것을 알 수 있다. 클래스명 앞에 붙은 L은 Object를 뜻한다.
.source는 소스파일 명이다.

2. Class Body
메소드는 .method로 시작하여 .end method로 끝난다.

클래스의 생성자 코드가 보이고 그 아래로 onCreate 메소드가 있다. 마지막 문자는 리턴타입으로 V는 Void를 뜻한다. (http://code.google.com/p/smali/wiki/TypesMethodsAndFields)

.locals는 메서드 내부에서 사용하는 레지스터 수(v0, v1, v2 ....)
.parameter는 매개변수로 받아온 변수명이다.
.prologue로 body가 시작하는데 사용되는 opcode들은 (http://netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html)에서 자세하게 확인할 수 있다.

.line xx는 java소스의 라인을 가리키므로 디버깅시 확인할 수 있다.

주로 함수 호출시 invoke-kind가 사용되는데 virtual, static, super등이 있다.
p0은 클래스 인스턴스를 가리키고 이후 value가 매개변수에 해당된다. 
메소드 명 뒤 괄호 안에 매개변수의 type을 지정하는데, primitive type의 경우 약어를 넣고 그 외의 type은  패키지명을 포함하여 지정한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
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 31
글 보관함