안드로이드의 소스파일, 목적파일, 실행파일
1. 안드로이드의 파일
▶ 파일확장자에 대한 소스파일, 목적파일, 실행파일
(1) .java
[1] 자바로 프로그램을 작성한 경우 .java라는 확장자를 가진 소스파일이 생성된다.
[2] 결국 프로그래머가 작성하는 소스라고 생각하면 된다.
[3] javac 컴파일러를 사용해서 컴파일한다.
(2) .class
[1] .class 파일은 자바의 중간코드이다.
[2] .java 파일을 컴파일한 바이트코드를 말하며 실행파일은 아니다.
[3] C로 예를 들면 컴파일후 오브젝트파일이 생성되지만 이 파일이 실행파일이 아닌 것과 동일하게 생각해도 좋다.
(3) .jar
[1] 하나의 소스파일에 모든 명령을 작성할 수 없으므로 .class파일의 묶음 정도로 생각하면 된다.
[2] .class를 모아놓았기 때문에 .dex와 비슷하다.
[3] 윈도우즈의 dll과 비슷하게 생각하면 이해가 쉬울 것이다.
[4] 리눅스의 .tar는 압축률이 거의 없지만 주로 관련있는 파일을 묶어놓는다.
[5] .jar도 [4]와 같이 생각해도 좋다.
(4) .dex
[1] exe, elf, mach-o와 비슷한 안드로이드 실행파일이다.
[2] .class를 묶어 놓은 후 앞에 헤더가 추가된 상태이다.
[3] 오브젝트파일에 PE헤더나 ELF헤더와 같이 OS에 따라 필요한 헤더정보가 추가된 상태이다.
(5) .apk
[1] .dex와 .xml을 하나로 zip 압축한 것이 .apk이다.
[2] .xml은 configuration 파일이다. 즉, 외부의 리소스 및 데이터를 저장하는 것으로 생각하면 된다.
[3] 윈도우즈는 파일을 개별적으로 다루지만, 안드로이드는 OSX의 .app과 같이 단순한 파일 하나가 아닌 폴더 째로 압축한 상태가 .apk이다.
+ WebAPP도 publishing(공개)할 때 압축한 후 tomcat에 설치한다.
[4] 결국은 압축파일이라는 소리인데 실행할 때는..?
▶ 원리는 패킹한 것을 언패킹하는 것과 비슷하다고 생각하면 된다.
▶ 실행하면 OS가 런칭하기 전 임시파일을 만들고 메모리에 올릴 수도 있지만 아마도 로더가 압축을 풀어서 메모리에 올리고 재배치 및 재구성한다.
[5] smali 코드는 자바의 어셈블러를 말한다.
+ 윈도우즈에서 exe의 기계어를 어셈블러라고 부르고, 안드로이드에서 dex의 기계어를 smali라고 부른다.
※ [java -jar 파일이름]과 같이 사용할 경우 런타임.. 즉 실행
[javac] 은 컴파일
+ 다음내용 컴파일러, 디컴파일러, 덱스, 언덱스에 대한 설명
'Check Vulnerability > Mobile' 카테고리의 다른 글
Application 취약점[브로드캐스트] (0) | 2019.04.08 |
---|
댓글