일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TLS
- v8 tracing
- Injection
- v8 optimizing
- tracerpid
- Android
- LLVM Obfuscator
- thread local storage
- initial-exec
- android inject
- anti debugging
- linux thread
- custom packer
- tracing
- on-stack replacement
- LLVM
- LLVM 난독화
- linux debugging
- 안티디버깅
- on stack replacement
- so inject
- Linux packer
- Obfuscator
- pinpoint
- 난독화
- pthread
- uftrace
- Linux custom packer
- apm
- OSR
- Today
- Total
Why should I know this?
Class linking 메커니즘 - jvm 본문
C++ / JAVA 와 같이 class와 상속을 지원하는 언어들은 class를 linking 하는 과정이 필요하다.
AOSP에 구현된 JVM을 통해 이 과정을 간단히 살펴보자. 왜? 재밌으니까~?
Class와 Instance 의 차이를 알고 계십니까?
Class는 설계도이고 Instance는 Class 설계도를 메모리에 적재한 것을 말하죠.
위 그림처럼 Class의 설계도는 ..dex=안드로이드 파일에 보관되어 있습니다. class를 생성하는 과정에서 해당 설계도를 기반으로 ClassObject를 만듭니다. Class는 Variable/Method 로 이루어져있고 Variable은 ClassObject에, Method들은 Method 를 보관하는 테이블에 보관되며 해당 Method들에 대한 Index가 vtable에 보관됩니다. (이건 Android만의 특징 )
vTable을 만드는 과정은 간단합니다!
1. 생성하려는 자식 class의 부모 class의 vtable을 순서대로 자식 class의 vtable에 채워넣는다.
2. 채워진 vtable에서 만약 override 된 메소드가 있으면 자식 class의 method 를 채워넣는다.
3. 자식 class에 남은 method를 vtable에 채워넣는다.
그러면 이렇게 실행되죠.
위 표에서 method @0003 => vtable 3번 메소드 호출이다!
이를 통해 compiler 타임에 class가 linking될 때 vtable에 채워질 메소드가 계산된다는 것도 알 수 있습니다.
매우 간단하네요 -끗-
'Study' 카테고리의 다른 글
Shuffler Fast and Deployable Continuous (0) | 2023.02.05 |
---|---|
Control Flow Integrity for COTS Binaries (0) | 2023.02.04 |
역공학(=Reverse Engineering)을 위한 컴퓨터 기본 원리 (0) | 2022.02.15 |
[C] 다른 문자 위치 찾기 (0) | 2019.11.17 |
git 복구 (0) | 2019.09.25 |