gcc 컴파일러 메모리 보호기법

2023. 3. 8. 21:09해킹

오브젝트 파일, 실행파일로 바꾸기 위해서는 고급언어를 저급언어로 바꿔주는 컴파일러가 필요한데 이를 C언어에서는 gcc가 담당한다.

 

여러가지 옵션이 많기는 하지만 일단 실행파일을 생성하는 -o 옵션을 주로 사용한다.

 

`아래는 가장 일반적으로 사용하는 gcc 커맨드이다.

gcc -o filename filename.c

 

하지만 버퍼오버플로우를 공부할 때 이 메모리 기법 옵션들을 공부해야한다.

이때문에 모든 메모리기법을 해제하고 하나하나 적용하는 방법으로 공부를 하던 편이었던 것 같은데

모두 해제하는 커맨드는 아래와 같다.

gcc -m32 -fno-stack-protector -z execstack -z norelro -fno-pie -no-pie -mpreferred-stack-boundary=2 -o filename filename.c

 

이제 옵션들의 의미를 알아보자

 

-m32(32bit 실행파일로 컴파일)

-m64(64bit 실행파일로 컴파일)

 

-mpreferred-stack-boundary=2(dummy값 제거 32bit 버전)

-mpreferred-stack-boundary=4(dummy값 제거 64bit 버전)

 

-fno-stack_protector(카나리값X)

-stack_protector(카나리값O)

 

-z execstack(메모리에 실행권한 부여, NX 해제)

 

-z norelro(NO RELRO)

-z relro (partial RELRO)

-z relro -z now(FULL RELRO)

 

-no-pie(상대주소X, 절대주소O)

-fpie(절대주소X, 상대주소O)

 

-fno-pie(PIC코드 X)

 

 

번외는 ASLR인데

cat /proc/sys/kernel/randomize_va_space 2

cat /proc/sys/kernel/randomize_va_space 0(ASLR X)

cat /proc/sys/kernel/randomize_va_space 1(stack, library ASLR O)

cat /proc/sys/kernel/randomize_va_space 2(stack, library, heap ASLR O)

 

 

 

참고문헌

https://realsung.tistory.com/199

'해킹' 카테고리의 다른 글

[dreamhack]XSS 공부  (0) 2023.03.16
[dreamhack]return to shellcode(canary)  (0) 2023.03.01
[dreamhack]return address overwrite  (0) 2023.02.27