[포너블] 리눅스 프로세스의 메모리 구조
1. 세그먼트 리눅스에서는 프로세스의 메모리를 크게 5가지의 세그먼트로 나눈다. 세그먼트란 데이터의 용도별로 메모리를 나눈 것인데 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 그리고 스택 세그먼트로 구분한다. 운영체제가 메모리를 용도별로 나누면 각각의 세그먼트에 권한을 부여할 수 있다는 장점이 있다. (읽기 쓰기 실행 권한이 있으며 CPU는 이 권한에 따라 접근할 수 있다.) 1.1 코드 세그먼트 실행가능한 기계 코드가 저장되는 곳이다. 프로그램이 동작하려면 코드를 읽고 실행시켜야 하기 때문에 읽기, 실행 권한이 부여된다. 쓰기 권한이 부여되면 공격자가 악의적인 코드를 삽입하기 쉬우므로 쓰기 권한은 부여되지 않는다. 예를들어 정수 31337을 반환하는 main함수가 컴파일 되면..