-
Ubuntu MIPS ARM 크로스 컴파일 환경 구성# 시스템 해킹 공부중 2018. 3. 28. 15:33
[GCC 크로스 컴파일러 및 라이브러리 설치]
sudo apt-get install -y gcc-multilib-arm-linux-gnueabi;sudo apt-get install -y gcc-multilib-arm-linux-gnueabihf;sudo apt-get install -y gcc-multilib-mips-linux-gnu;sudo apt-get install -y gcc-multilib-mips64-linux-gnuabi64;sudo apt-get install -y gcc-multilib-mips64el-linux-gnuabi64;sudo apt-get install -y gcc-multilib-mipsel-linux-gnu;sudo apt-get install -y gcc-multilib-powerpc-linux-gnu;sudo apt-get install -y gcc-multilib-powerpc64-linux-gnu;sudo apt-get install -y gcc-multilib-s390x-linux-gnu;sudo apt-get install -y gcc-multilib-sparc64-linux-gnu
è MIPS와 ARM 등 다양한 환경 구성에 필요한 각종 라이브러리들
[QEMU 설치]
sudo apt-get install qemu-user-static
[컴파일 및 실행]
ex ) MIPS
컴파일 : mips-linux-gnu-gcc -o test test.c
실행 : qemu-mips-static -L /usr/mips-linux-gnu/ ./test
[디버깅]
1. gdb-multiarch 설치
sudo apt-get install gdb-multiarch
2. GDB 대기 등록
qemu-mips-static -L /usr/mips-linux-gnu/ -g 8888 ./test
3. gdb-multiarch 실행 및 환경 설정
(gdb) set architecture mips
(gdb) set endian big
4. 원격 디버깅 실행
(gdb) target remote localhost:8888
(gdb) symbol-file ./test 혹은 (gdb) file ./test 로 바이너리 심볼 로드
è 우분투 날라가기 전에는 자동으로 심볼 로드가 됐는데 이번에 새로 구성하면서 자꾸 디버깅이 안되서 한참을 삽질했다. 아마 gdb 버전의 문제라고 생각 중인데 시간이 너무 오래걸려서 우선 이렇게 사용하기로 했다.
5. 추가 사항
https://github.com/longld/peda 의 gdb-peda는 분명 예전 우분투에선 mips 바이너리도 원격 로드시 잘 동작됐는데 심볼이 자동적으로 로드 안되면서 뭔가 동작이 잘 되지 않았다.
https://github.com/hugsy/gef.git 을 사용하면 gdb-multiarch 로 바이러리 원격 로드해도 peda의 기능들이 정상적으로 동작된다.
peda와 같은 gdb 플러그인을 사용하지 않는다면
display /16i $pc
display /16wx $esp
와 같은 명령어를 이용해서 편리하게 디버깅을 할 수 있다.
peda에서 symbol-file ./test 와 같이 심볼 로드를 했을 때 Segmentation Fault 가 떳다. gdb 버전을 7.4로 낮추라는 말이 있었지만 7.4로 낮출 경우 gdb-multiarch 가 동작을 하지 않았고, 7.5 버전 소스파일을 받아서 컴파일 하려하니 make 에서 컴파일 에러가 계속 발생했다. 7.8.2 버전을 설치하라는 글을 보고 했더니 컴파일 에러도 없고 설치도 잘되며, gdb-multiarch 도 동작이 잘 되었다. peda와 gef 역시 잘 동작 된다.
peda와 7.8.2 버전 설치와 관련해서는 https://hexa-unist.github.io/2015/02/25/PEDA-Introduction-Installation/ 글을 참조하였다.
p.s. gef도 없이 peda 만으로 symbol-file 안해도 잘 됬었는데 대체 예전 우분투에서 내가 어떻게 환경 구성을 했는지 너무 궁금하다.
참고사이트
- http://blog.sweetchip.kr/401
'# 시스템 해킹 공부중' 카테고리의 다른 글
[안드로이드] 안드로이드 앱 실시간 패킷 캡쳐 및 분석 with mitmproxy, Wireshark (6) 2019.10.09 pwntools gdb.attach 사용법 - python process debugging (2) 2019.08.05 가상함수(Virtual function)와 가상함수테이블(vtable)의 이해 (9) 2019.07.17 [MIPS] strcmp (0) 2018.04.04 [MIPS] MIPS 기본 내용 정리 (0) 2018.03.28