반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

ZZoMb1E

[AArch64] x86_64 간단 비교 본문

STUDY/PWNABLE_AArch64

[AArch64] x86_64 간단 비교

ZZoMb1E 2024. 3. 20. 15:10
728x90
반응형

 잘못된 부분이 있으면 알려주세요. 확인 후 수정하도록 하겠습니다.  

 

 

효율적인 전력 사용과 높은 성능의 위해서 설계된 architecture이다.

주로 스마트폰, 임베디드 시스템 등의 환경에서 사용되고 있다.

 

 

간단하게 x86_64와 비교해보겠다.

#include <stdio.h>

int main(int argc, char*argv[]){
	printf("Hello world!\n");
	return 0;
}

 

위의 코드를 아래의 두 가지 방법으로 컴파일을 진행한다.

aarch64-linux-gnu-gcc -static -no-pie -o test test.c
gcc -no-pie -static -o x86 test.c

 

AArch64로 정상적으로 컴파일 되었는지 확인하는 방법이다.

 

 

해당 파일을 그대로 실행 혹은 디버깅 할려고 하면 안될 것이다.

AArch64 ld, libc 파일이 없기 때문인데 아래의 경로를 통해 설치를 진행한다.

http://mirror.archlinuxarm.org/aarch64/core/glibc-2.35-5.1-aarch64.pkg.tar.xz 

wget http://mirror.archlinuxarm.org/aarch64/core/glibc-2.35-5.1-aarch64.pkg.tar.xz

tar -xvf glibc-2.35-5.1-aarch64.pkg.tar.xz
cd usr/lib/
sudo cp ld-linux-aarch64.so.1 /lib/
sudo cp libc.so.6 /lib/

 

 

 

AArch64 디버깅을 위해서 gdb-multiarch를 설치한다.

sudo apt -y install gdb-multiarch

 

아래와 같은 방법으로 명령어를 입력해주면 main()을 디버깅할 수 있다.

gdb-multiarch
set architecture aarch64
file ./test

disass main

 

생소한 어셈블리어와 구조가 보인다.

이를 x86_64와 비교해서 확인해보겠다.

 

함수의 prologue, epilogue의 형태가 [push, mov,sub] -> [stp, mov] , [leave-ret] -> [ldp-ret]로 바뀐 것을 볼 수 있다.

이외에도 문자열의 주소를 직접 가져오지 않고 adrp를 통해 상대주소를 계산하여 가져온다.

 

 

x86_64에 비교하여 각 레지스터에 대한 정리한 것이다.

X0~X7 = rdi, rsi, rdx, rcx, r8 ,r9 와같은 매개 변수 전달
X8~X18 = 임시 레지스터
X19~X28 = 함수를 호출할 때 기존의 메모리 주소를 보존하기 위해 사용되는 백업용 레지스터
X29 = BasePointer
X30 = RetAddress
SP = StackPointer

 

 

 

728x90
반응형

'STUDY > PWNABLE_AArch64' 카테고리의 다른 글

[AArch64] Buffer OverFlow (실습)  (1) 2024.05.01
[AArch64] PAC  (0) 2024.04.08
[AArch64] Debugging  (1) 2024.03.23
[AArch64] Buffer OverFlow (with chaining)  (0) 2024.03.20
[AArch64] Buffer OverFlow  (0) 2024.03.20