# g++ hello.cpp -o a2.out
ARM 크로스 컴파일 환경 만들기
# sudo apt-get install gcc-arm-linux-gnueabi
# sudo apt-get install g++-arm-linux-gnueabi
# arm-linux-gnueabi-g++ hello.cpp
이제 a.out 파일을 모바일 기기에 옮겨서 실행하면 에러가 뜬다.
모바일 기기에서 실행이 잘되는 파일을 우분투에 옮겨서 파일 정보를 살펴보았다.
모바일 기기에서 잘 동작하는 elf 파일과 동작하지 않는 elf 파일의 차이점은 3가지가 있었다.
1. not stripped와 stripped
2. interpreter이 /system/와 /lib/ld-
3. executable과 shared object인 차이가 있다.
아마 a.out 을 컴파일 할 때 정적 라이브러리로 컴파일 하지 않아서 그런 것 같다.
우선 not stripped와 stripped의 차이는 stripped 된 파일은 심볼이 삭제된 파일이다.
strip 명령어는 일반적으로 빌드 완료한 실행 파일 또는 라이브러리에서 불필요한 심볼을 제거하는데 사용한다.
정적 라이브러리 링크로 파일을 만들어보자!!
# arm-linux-gnueabi-g++ hello.cpp -static
# mv a.out a_static.out
동적 라이브러리 링크 파일에 비해 섹션 별 크기도 엄청 늘어난 것을 볼 수 있다.
이제 정적 라이브러리 링크 파일을 모바일 기기에 옮겨서 실행 해보자!!
정상적으로 실행이 잘된다!
결론은 우분투에서 동적 라이브러리 링크로 컴파일 시 모바일 환경에는 해당 라이브러리들이 없어서 실행이 안되었던 것 같다.
우분투에서 라이브러리들을 다 포함시켜 정적 라이브러리 링크로 컴파일 했더니 모바일 환경에서 잘 실행됬다.
'Android > Reversing' 카테고리의 다른 글
APK 파일 보호 기법(2) (0) | 2020.03.13 |
---|---|
APK 파일 보호 기법(1) (0) | 2020.03.13 |
DEX 동적 분석(1) - IDA (0) | 2020.03.10 |
DEX 동적 디버깅하기 위한 조건 (0) | 2020.03.10 |
smali 코드 패치로 루팅 우회하기 (0) | 2020.03.10 |
WRITTEN BY