Wikimedia Foundation, Inc. 블로그 포스트 번역
2004-02-02T22:52:00Z
Memory corruption은 컴퓨터 프로그램에서 메모리 위치의 내용이 원래 프로그래머의 의도나 프로그램/언어 구조를 초과하는 프로그래밍 동작으로 인해 수정될 때 발생합니다. 이를 메모리 안전성 위반이라고 합니다. Memory corruption의 가장 가능성 높은 원인은 프로그래밍 오류(소프트웨어 버그)입니다. 손상된 메모리 내용이 나중에 프로그램에서 사용될 때, 프로그램 충돌이나 이상하고 기이한 프로그램 동작으로 이어집니다. Windows 시스템의 애플리케이션 충돌 중 약 10%는 heap corruption으로 인한 것입니다. C와 C++와 같은 현대 프로그래밍 언어는 명시적 메모리 관리와 pointer arithmetic의 강력한 기능을 가지고 있습니다. 이러한 기능은 효율적인 애플리케이션과 시스템 소프트웨어를 개발하기 위해 설계되었습니다. 그러나 이러한 기능을 잘못 사용하면 memory corruption 오류가 발생할 수 있습니다. Memory corruption은 두 가지 이유로 가장 다루기 어려운 프로그래밍 오류 중 하나입니다:
- Memory corruption의 원인과 그 증상이 멀리 떨어져 있을 수 있어서 원인과 결과를 연관시키기 어렵습니다.
- 증상이 비정상적인 조건에서 나타나므로 오류를 일관되게 재현하기 어렵습니다.
Memory corruption 오류는 크게 네 가지 범주로 분류할 수 있습니다:
- 초기화되지 않은 메모리 사용: 초기화되지 않은 메모리의 내용은 쓰레기 값으로 취급됩니다. 이러한 값을 사용하면 예측 불가능한 프로그램 동작으로 이어질 수 있습니다.
- 소유하지 않은 메모리 사용: 메모리에 접근하고 수정하기 위해 pointer를 사용하는 것이 일반적입니다. 이러한 pointer가 null pointer, dangling pointer(이미 해제된 메모리를 가리킴), 또는 현재 stack이나 heap 범위 외의 메모리 위치를 가리키는 경우, 프로그램이 소유하지 않은 메모리를 참조하고 있습니다. 이러한 pointer를 사용하는 것은 심각한 프로그래밍 결함입니다. 이러한 메모리에 접근하면 일반적으로 운영 체제 예외가 발생하며, 대부분 프로그램 충돌로 이어집니다(적절한 메모리 보호 소프트웨어를 사용하지 않는 한).
- 결함 있는 heap 메모리 관리: 메모리 누수와 heap이 아닌 메모리나 할당되지 않은 메모리 해제는 결함 있는 heap 메모리 관리로 인한 가장 빈번한 오류입니다.
참고문헌
외부 링크