gcc(ver.stack_over_flow)
2020. 8. 26. 00:28
Stack Oveflow를 공부할 때 사용하는 gcc 옵션을 정리해보겠다.
-m32
32비트 모드로 컴파일하는 옵션이다.
64비트로 하고싶다면 -m64를 주면 된다.
-no-pie
PIE를 끄는 옵션이다.
PIE를 통해 컴파일을 하게 되면 실제 주소에 상대 주소가 매핑되어 실행할 때마다 주소 값이 바뀌며 단순하다는 특징을 가지고 있다.
-z norelro
RELRO는 Relocation Read-Only의 약자로 바이너리의 symbol 및 got 등에 보호기법을 거는 것을 말한다.
NO RELRO는 ELF 기본헤더, 코드영역을 제외한 거의 모든 부분에 Read, Write 권한을 준다.
Partial RELRO는 NO RELRO에서 _DYNAMIC 섹션에 Write 권한이 없다.
FULL RELRO는 bss 영역을 제외한 모든 부분에서 Write 권한이 없다.
-fno-stack-protecter
Stack Overflow를 보호하는 기능을 끈다.
-z execstack
Stack에 실행권한을 준다.
-mpreferred-stack-boundary=(2~12)
gcc로 컴파일 하게 되면 함수의 프롤로그와 에필로그에 ecx를 통한 esp 변조를 확인할 수 있는데, 이는 SSE 계열 함수들을 위해 미리 예약해두는 공간이라고 한다.
SSE 계열의 함수는 고속복사를 위해 128비트 단위로 복사를 진행해 기존의 push ebp, mov ebp, esp와 같은 형태로는 에러가 날 수 있다고 한다.
따라서 SSE 계열 함수를 사용하지 않는다면, gcc에 옵션을 줄 수 있다.
'[▒] 언어 > LINUX(ubuntu)' 카테고리의 다른 글
ctrl+shift+v (복사/붙여넣기)가 안될 때 (0) | 2020.08.26 |
---|---|
gcc(옵션 정리) (0) | 2020.08.09 |
gcc (0) | 2020.08.09 |