서론
우리는 일반적 intel cpu 아키텍쳐를 사용하는데 이 아키텍쳐에서는 다른 아키텍쳐에서 컴파일 된 바이너리를 실행 할 수 없다. 따라서 intel 아키텍쳐에서 다른 바이너리를 실행하는 방법을 적어 보려한다.
qemu
vm말고 다른 아키텍쳐를 임시로 실행시켜주는 가상화 도구
Cross compile
다른 architecture 의 실행코드를 생성하는 것
– x86 에서 x86 코드 컴파일 => Not Cross Compiler
– ARM 에서 ARM 코드 컴파일 => Not Cross Compiler
– x 86 에서 ARM 코드 컴파일 => Cross Compiler!
– x86 에서 MIPS 코드 컴파일 => Cross Compiler!
Cross compiler
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;
Setting
install
apt install qemu-user-static
=>실행하기 위해 필수 install
build
arm-linux-gnueabi-gcc -o test test.c
test:만들 실행파일명, test.c 컴파일할 파일
=>build는 크로스 컴파일러로 하면 되며 사용법은 gcc랑 똑같다.
run
qemu-arm-static -L /usr/arm-linux-gnueabi ./test
remote debug
multiarch gdb
install
apt-get install gdb-multiarch
debug
qemu-arm-static -L /usr/arm-linux-gnueabi -g 4444 ./test
=> -g 옵션으로 포트를 설정하여 test바이너리 열어두는데 stdio여서 nc로는 안보일것이다.
gdb-multiarch
$(gdb-peda) set arch arm
$(gdb-peda) target remote ip:port
$(gdb-peda) disas main
'임베디드 > ARM' 카테고리의 다른 글
ARM 아키텍처 어셈블리 (1) | 2021.01.11 |
---|