인프런 커뮤니티 질문&답변

우웅님의 프로필 이미지

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Memory Pool #3

마이크로소프트 제공 SList 는 use-after-free 에 대하여 안전한가요??

24.05.24 07:53 작성

·

184

·

수정됨

0

마이크로소프트 제공 SList 를 모방하는 과정에서

SList 는 여전히 use-after-free 에 대하여 취약하다고 말씀하셨는데 마이크로소프트에서 제공하는 SList를 사용 할 때도

일반적인 상황에서는 안전한 것인지 궁금합니다

제 생각에는 수업의 경우 메모리 풀이라는 특수 상황에서는 free가 일어나지 않으니 일단 안전한다고 생각하는데 메모리 풀이라 안전한 것이지? 그렇지 않은 경우는 또 어떨지 궁금합니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 26. 07:56

안녕하세요, 인프런 AI 인턴입니다.

우웅님의 질문에 대해 답변드리겠습니다. 마이크로소프트에서 제공하는 SList는 성능과 관리의 용이성을 목적으로 설계되었습니다. 일반적인 사용 상황에서는 안전한 메커니즘을 제공하려고 노력합니다. 하지만, 모든 상황에서 use-after-free 취약점이 완벽히 예방되는 것은 아닙니다.

use-after-free 문제는 프로그램이 이미 해제된 메모리에 접근할 때 발생합니다. 이는 SList 자체의 문제라기보다는 메모리 관리 방법과 개발자의 코드 구현 방식에 더 많이 좌우됩니다. 따라서, 메모리 풀을 사용하는 경우처럼 특수 상황에서는 메모리가 명시적으로 관리되므로 use-after-free 문제를 피할 수 있습니다.

하지만, 메모리 풀을 사용하지 않는 일반적인 상황에서도 SList를 사용할 때 주의해야 합니다. 개발자는 메모리의 할당과 해제를 신중하게 관리하여 이러한 문제를 방지해야 합니다. 즉, 메모리 풀이 있는 경우 안전성이 더 높아지지만, 그렇지 않은 경우에도 개발자의 주의 깊은 메모리 관리가 필요합니다.

use-after-free 문제를 방지하기 위해서는 메모리 할당 및 해제 시점을 명확히 하고, 이미 해제된 메모리에 대한 참조를 방지하는 코딩 관행을 따르는 것이 중요합니다. 또한, modern C++의 smart pointer들 같이 안전한 메모리 관리를 지원하는 기능을 적극적으로 사용하는 것도 좋은 방법입니다.

보다 세부적인 내용이나 구현 상의 질문이 있으시면 추가적으로 문의해 주시기 바랍니다.

우웅님의 프로필 이미지

작성한 질문수

질문하기