1. DEX ?
"Android"는 JVM(자바가상머신)이 아닌 DVM(달빅가상머신)을 사용하여 .dex파일을 실행한다.
- JVM은 컴퓨터의 메모리를 사용하여 스택기반으로 작업코드를 읽어서 사용하고, DVM은 하나의 파일에 모든 소스가 있어서 DEX파일로 부터 작업코드를 읽어 사용한다. 메모리측면으로 봤을 경우 JVM이 뛰어나나 속도측면에서는 DVM이 뛰어남.
- Dalvik이란 Android에서 앱을 실행하기 위해 설계된 경량의 가상머신이다. 특징은 각 앱은 독립적으로 실행되어 메모리와 프로세스를 공유한다.
"DEX"는 구글에서 "Dalvik Executable"의 약자로 모바일 디바이스에서 사용하기 위해 만들어졌으며, "Android"에서 사용되는 "DEX"라는 파일 포맷은 Java로 짜인 코드가 컴파일되어 번역된 바이트코드들과 바이트코드들의 구조에 대한 설계를 포함하고 있다. 쉽게 말해 런타임에서 실행되는 코드가 포함이 되어있는 기계어다.
ex) 안드로이드 소스코드(자바, 코틀린 등)를 언어별 컴파일 통해 바이트 코드인. class 파일로 컴파일이 되며. class파일은. dex 확장자를 가지는 DEX 파일로 컴파일이 된다.
2. DEX 파일 레이아웃
이름 | 형식 | 설명 |
header | header_item | 헤더 |
string_ids | string_id_item[] | 문자열 식별자 목록입니다. 이는 내부 이름 지정(예: 형식 설명어) 용도로 또는 코드에서 참조한 상수 객체로서 이 파일에서 사용되는 모든 문자열에 관한 식별자입니다. |
type_ids | type_id_item[] | 형식 식별자 목록입니다. 이는 파일 내 정의 여부와 관계없이 이 파일에서 참조한 모든 형식(클래스형, 배열형 또는 기본형)을 저장하고 있는 영역 |
proto_ids | proto_id_item[] | 메서드 프로토타입 식별자 목록입니다. 이는 dex 파일 내에서 함수의 구조를 저장하고 있는 영역 |
field_ids | filed_id_item[] | 필드 식별자 목록입니다. . 이 목록은 정렬되어야 하며 type_id 색인 기준으로 정의하는 형식이 1순위 순서, string_id 색인별 필드 이름이 2순위 순서, type_id 색인별 형식이 3순위 순서입니다. 클래스의 이름, type,class,package를 제공하는 영역 |
method_ids | method_id_item[] | 메서드 식별자 목록입니다. method의 이름, type, 소속된 class 이름을 저장하는 영역 |
class_defs | class_def_item[] | 클래스 정의 목록입니다. calss에 대한 전체적인 정보와 데이터에 대한 기초 정보를 저장하는 영역 |
call_site_ids | call_site_id_item[] | 호출 사이트 식별자 목록입니다. 이는 파일 내 정의 여부에 관계없이 이 파일에서 참조하는 모든 호출 사이트의 식별자의 정보를 저장하는 영역 |
method_handles | method_handle_item[] | 메서드 핸들 목록입니다. 파일 내 정의 여부에 관계없이 이 파일에서 참조하는 모든 메서드 핸들의 목록을 저장하는 영역 |
data | ubyte[] | 데이터 영역 |
link_data | ubyte[] | 정적으로 연결된 파일에서 사용되는 데이터입니다. 본 문서에서 이 섹션의 데이터 형식은 지정하지 않은 채로 둡니다. |
3.참조
https://source.android.com/docs/core/runtime/dex-format?hl=ko
Dalvik Executable 형식 | Android 오픈소스 프로젝트 | Android Open Source Project
Dalvik Executable 형식 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 문서에서는 클래스 정의 및 관련 부속 데이터를 보유하는 데 사용되는 .dex 파일의 레이
source.android.com
'앱 진단 > 안드로이드 진단' 카테고리의 다른 글
안드로이드 리패키징(인시큐어뱅크) (1) | 2025.04.01 |
---|---|
안드로이드 - 루팅 (0) | 2024.12.17 |
안드로이드 - Smali (0) | 2024.09.09 |
Apk - 디컴파일 및 리패키징 (0) | 2024.08.22 |