[▒] 언어/LINUX(ubuntu)
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는 b..
gcc 전역 옵션 -E 전처리 과정 화면에 출력 -S 어셈블리 파일 생성 -c 오브젝트 파일 생성 -v 컴파일 과정 화면에 출력 --save-temps 컴파일시 생성되는 중간 파일 저장 -da 컴파일 과정에서 생성되는 중간 코드 생성(RTL파일 등 생성) 전처리기(cpp0)옵션 -l[패스] 헤더 파일을 탐색할 디렉터리 지정 ex) -l/opt/include -include [헤더 파일 패스] 해당 헤더 파일을 모든 소스 내 추가 ex) -include /root/my_header.h -D[매크로] 외부에서 #define 지정 -DDEBUG -D[매크로]=[매크로 값] 외부에서 해당 매크로를 정의하고 값을 지정 ex) -DDEBUG=1 -U[매크로] 외부에서 #undef 지정 ex) -UDEBUG -M 또..
gcc -v를 통해 버전을 확인하자. 설치되어있지 않다고 한다면, sudo apt install gcc 명령을 통해 설치하자. gcc 사용하기 먼저, C언어를 배웠다면 정말 지긋지긋하기 짝이 없는 이 소스코드를 hello.c라는 이름으로 저장한다. 무소식이 희소식이다.. hello.c 파일을 실행시키려고 무심코 'hello'를 쳤다. 당연히 안된다. 어떠한 파일을 실행시키고 싶을 때에는 꼭 ./으로 적어줘야한다. 유닉스는 기본적으로 PATH라는 환경변수에 있는 디렉터리에서만 실행파일을 찾는다. 만약 PATH라는 도트 문자(.)이 들어있지 않으면 현재 디렉터리의 실행파일은 절대 실행되지 않는다. 게다가 현재 디렉터리를 PATH 환경 변수에 넣어준다 할지라도 현재 디렉터리를 먼저 찾는다든지 하는 일은 없다...