임베디드/ARM

intel 아키텍쳐에서 다른 아키텍쳐 바이너리 실행

우제혁 2021. 1. 12. 06:05

서론

우리는 일반적  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

 

 

참고:delspon.wordpress.com/2018/01/14/arm-가상-환경-구축/