mips 란?
Microprocessor without Interlocked Pipelined Stages
아키텍처 중 하나로 4byte 주소체계를 가진 RISC 기반 명령어이다.
mips의 특징중에는 특이한 것이 하나 있는데 바로 "delay slot" 이라는 것을 사용한다.
이는 branch 나 jump같은 분기 명령이 실행될 때 다음 줄 명령까지 실행한다는 것이다. 그렇기 때문에 rop 를 짤때 마지막 한 줄을 생각해줘야 한다.
예를 들어서 다음 코드를 보자.
1) lw gp,24(s8)
2) li a0,1
3) lw v0,-32584(gp)
4) move t9,v0
5) jalr t9
6) nop
다음과 같은 어셈블리 코드가 실행이 된다고 치자. 원래같으면 1, 2, 3, 4, 5 순서로 실행이되고 jump 한 곳의 코드를 실행한다. 하지만 mips에서는 jump나 branch를 할 때 다음 줄 명령을 실행하기 때문에 5번을 실행할 때 6번 까지 실행을 해준다.
mips 크로스 컴파일 & 디버깅
qemu 설치
sudo apt-get install qemu-user-static
sudo apt-get install gcc-multilib-mips-linux-gnu
컴파일
mips-linux-gnu-gcc -o test test.c
mips-linux-gnu-gcc -static -o test test.c
실행
qemu-mips -L /usr/mips-linux-gnu/ ./test
qemu-mips-static ./test
리모트 디버깅
qemu-mips -g (포트) -L /usr/mips-linux-gnu ./실행파일
어셈블리어 컴파일
mips-linux-gnu-as -o sss.o sss.asm
mips-linux-gnu-ld -o sss sss.o -e _start
디버깅을 할 때는 gdb-multiarch 로 해줘야 한다. 그치고 archtecture 와 endian을 지정해줘야 한다.
<틀린 부분이 있다면 비난과 욕설을 해주세요>
'mips' 카테고리의 다른 글
mips rop (0) | 2025.03.25 |
---|---|
mips shellcode (0) | 2025.03.18 |
mips 스택프레임, 레지스터, 어셈블리어 (0) | 2025.03.10 |