www.liutilities.com
gravity-free/exeInfo 2012. 5. 9. 19:56'gravity-free > exeInfo' 카테고리의 다른 글
exeDB (0) | 2012.05.21 |
---|---|
www.windowexe.com (0) | 2012.05.08 |
www.liutilities.comgravity-free/exeInfo 2012. 5. 9. 19:56'gravity-free > exeInfo' 카테고리의 다른 글
www.windowexe.comgravity-free/exeInfo 2012. 5. 8. 16:01'gravity-free > exeInfo' 카테고리의 다른 글
smali analysis 1mobile/android 2012. 4. 19. 16:51안드로이드의 APK파일은 APKTool을 통해 분해, 재조립을 할 수 있다. 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은 패키지명을 포함하여 지정한다. 'mobile > android' 카테고리의 다른 글
|