컴퓨터구조론 강의를 들으면서 배운 ARM과 MIPS 방식이 실제로 어떻게 돌아가는지 궁금증이 생겼다. 그래서 검색해보니 CrossCompile을 진행하면 c언어가 원하는 환경으로 멀티 컴파일 되어 코드를 다른 방식으로 역어셈블을 할 수 있게된다고 한다.
이러한 환경변경을 가능하게 해주는 유틸리티가 있다.
바로 가상화 소프트웨어중 하나인 QEMU이다.
Install
1 2 3 4 5 6 7 8 9 10 | 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 | cs |
위와 같이 여러 멀티 컴파일 라이브러리를 설치한다.
Compile
1 | arm-linux-gnueabi-gcc -o file file.c -g -static | cs |
ARM 방식으로 컴파일을 원할경우 위와같이 명령을 입력하면 된다.
1 | mips-linux-gnu-gcc -o file file.c -g -static | cs |
MIPS 방식으로 컴파일을 원할경우 위와같이 명령을 입력하면 된다.
QEMU
1 | qemu-arm-static -L /usr/arm-linux-gnueabi ./file | cs |
ARM 가상환경을 구축한다.
1 | qemu-mips-static -L /usr/mips-linux-gnu ./file | cs |
MIPS 가상환경을 구축한다.
GDB
1 | gdb-multiarch | cs |
gdb 소프트웨어를 다양한 아키텍쳐로 실행할 수 있는 명령이다.
1 | (gdb) file ./file | cs |
gdb 소프트웨어 내에서 역어셈블을 원하는 파일을 불러온다.
(앞의 file은 명령이고 뒤의 file은 실제 파일명이다)