Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags more
Archives
Today
Total
관리 메뉴

난 정말 최고야 멋있어

게임가디언 분석 1 본문

카테고리 없음

게임가디언 분석 1

n00bh4cker 2020. 4. 10. 17:58

게임가디언에서는 어떻게 라이브러리를 불러올까

 

게임가디언의 네이티브 파일들은 assets/raw 경로에 chunkXXX 이런 식의 이름으로 존재한다

어떻게 불러 오는것인지 알아보았다

public static void initNative() {
        char[] libs;
        if (Build.VERSION.SDK_INT < 21) {
            libs = new char[6];
            libs[1] = LIB_X86_CLIENT;
            libs[2] = LIB_ARM_V7A_CLIENT;
            libs[3] = LIB_ARM_CLIENT;
            libs[4] = LIB_X86_64_CLIENT;
            libs[5] = 'r';
        } else {
            libs = new char[6];
            libs[1] = LIB_X86_64_CLIENT;
            libs[2] = LIB_X86_CLIENT;
            libs[3] = 'r';
            libs[4] = LIB_ARM_V7A_CLIENT;
            libs[5] = LIB_ARM_CLIENT;
        }
        String dir2 = getDaemonDir();
        int i = 0;
        while (i < libs.length) {
            if (i == 0) {
                int j = 1;
                while (true) {
                    if (j >= libs.length) {
                        break;
                    } else if (new File(dir2, libName(libs[j])).exists()) {
                        libs[0] = libs[j];
                        break;
                    } else {
                        j++;
                    }
                }
                if (libs[0] == 0) {
                    continue;
                    i++;
                }
            }
            File lib = new File(dir2, libName(libs[i]));
            if (!lib.isFile()) {
                extractLib(libs[i]);
            }
            if (!lib.isFile()) {
                Log.m4d("Not a file " + lib + ' ' + lib.getAbsolutePath());
                i++;
            } else {
                try {
                    System.load(lib.getAbsolutePath());
                    try {
                        ProcessBuilder.loaded();
                        return;
                    } catch (Throwable e) {
                        Log.m7d("Failed check " + lib + ' ' + lib.getAbsolutePath(), e);
                    }
                } catch (Throwable e2) {
                    Log.m7d("Failed load " + lib + ' ' + lib.getAbsolutePath(), e2);
                }
            }
        }
    }

File 클래스를 이용해 파일을 불러 온 다음에 System.load 를 이용하여 불러오는 것을 알 수있다

 

다시 생각해보면 lib 폴더에 없으니 당연히 System.loadlibrary 사용이 아니였을건데 ㅋㅋ 

System.loadlibrary 만 알고 있던 나에게는 신기한 정보였다 

자바 공부좀 하자 ㅋㅋ

 

참고로 System.load 는 lib 파일 이름만 입력해서 되는것이 아닌 절대 경로를 입력해주어야 한다고 한다