"컴퓨터 시스템 (김형신 옮김)" 책을 바탕으로 정리한 내용이다.
: 프로그래머들이 어떻게 컴파일 시스템이 동작하는 이해하는 것은 중요하다.
: 가장 당혹스러운 프로그래밍 에러이며, 큰 규모의 소프트웨어 시스템 빌드 시 자주 발생한다.
- 예시1 ) 링커가 어떤 참조를 풀어낼 수 없다는 것은 뭔가?
- 예시2 ) 정적변수와 전역변수의 차이는?
- 예시3 ) 정적 라이브러리와 동적 라이브러리의 차이는?
- 예시4 ) 왜 링커 관련 에러는 실행 전까지 나타나지 않는가?
: 버퍼 오버플로우(buffer overflow) 취약성은 인터넷과 네트워크상의 보안 약점의 주요 원인이었다.
: 이런 이슈 때문에 안전한 프로그래밍 입문을 위해, 프로그램 스택에 데이터와 제어 정보가 저장되는 방식으로 발생하는 영향에 대해 이해하는 것이 중요하다.
** 버퍼 오버플로우
: 프로그래밍에서 데이터를 버퍼에 저장할 때, 데이터가 지정한 곳 바깥에 저장되는 것을 의미한다.
: 벗어난 데이터는 인접 메모리를 덮게 되며, 이때 프로그램 변수와 프로그램 흐름 제어 데이터 등이 손상받을 수 있다.
: 이로 인해 잘못된 프로그램 오작동 및 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 또는 시스템 보안 누설이 발생할 수 있다.