il2cpp 원리를 혹시 아시나요? (조금 깊은 지식을 요구하는 질문입니다)

홈 > 커뮤니티 > 질문 게시판
질문 게시판

il2cpp 원리를 혹시 아시나요? (조금 깊은 지식을 요구하는 질문입니다)

1 il2cpprev 3 3699
C#으로 작성되어 Intermediate Language로 컴파일된 후에 IL이 asm으로 변환되어 libil2cpp.so이 되는 것 같은데
global metadata.dat는 어디에 쓰이기 때문에 있는 것이고, (문자열의 용도 외에 심볼은 왜 남겨두는지)
libil2cpp.so로부터 어떻게 다시 IL을 추출하고 그걸로 Assembly_Csharp.dll같은게 나오고 cs 파일로 디컴파일이 가능한지 혹시 아시는 분 계신가요?
그리고 Assembly_Csharp.dll은 DLL이면 PE 포맷인가요? 어떻게 PE포맷 파일이 나올 수 있나요? (만약 libil2cpp.so의 rsrc에 dll이 있는거라면 그 dll은 pe라 크로스플랫폼이 아닐텐데 그렇게 되어있을 것 같지는 않구요)
3 Comments
15 g00dluck 2020.09.25 00:38  
영어이긴 하나 대부분의 블로그에서 참조하는 사이트인
https://blogs.unity3d.com/2015/05/06/an-introduction-to-ilcpp-internals/ 읽어보세요

그리고 Unity 다운로드(https://unity3d.com/kr/get-unity/download) 하여 안드로이드 샘플앱(IL2CPP)로 만들어보시고,
Unity Editor에 들어있는 소스코드(어떻게 global_metadata.dat가 로드되는지) 까지 공부하면됩니다.
github에 올라와있는 il2cpp덤퍼들의 구조도 이렇게 분석해서 구현된것들이죠.
1 il2cpprev 2020.09.25 01:08  
https://forum.unity.com/threads/why-is-the-global-metadata-necessary.713249/

이쪽에서도 비슷한 생각을 한 사람이 있는데 제대로 된 답은 안달렸네요 global metadata에 심볼은 왜 살려두는건가요??
15 g00dluck 2020.09.25 02:03  
제가 아는 범위에서 간단하게 설명드리면 Unity C# Reflection 지원 때문입니다.