free시에 메모리의 데이터는??
글쓴이: mg2000 / 작성시간: 화, 2009/04/21 - 10:29오전
malloc으로 할당을 하고 free로 해제를 하는데요.
Windows나 Linux에서는 free를 해주면 사용했던 메모리 공간은 ee나 NULL로 채워버리게 되는데요.
HP-UX에서는 메모리 공간의 데이터가 그대로 남아있네요.
원래 free 해줄때, free함수로 메모리 공간을 초기화해줄 의무는 없는 것인지,
그렇다면, 메모리 공간에 데이터를 남기고 싶지 않다면 수작업으로 초기화를 해 주어야 하는 것인지 궁금하네요.
Forums:
제 생각엔...
windows나 linux에서도 debug 빌드에서만 그렇지 않나요?
그렇지 않다면 쓸데없는 overhead가 있을 것 같은데...
성능을 중요시 하는 프로젝트에서는 memcpy나 memset의 부하도 정말 만만치 않더라구요...
어쩔 때는 new의 부하도 감당하기 힘들어서 malloc으로 할당하고,
필요한 부분만 replacement new를 이용한다는...
debugging 용도가 아니라면 차라리 해제한 메모리를 특정 값으로 채우는 건
없는 것이 더 좋을 것 같네요...
_________________________________________________________
nineye's blog
보안? 문제 때문에
보안? 문제 때문에 그러시는 것 같은데, malloc()/free()는 메모리를 초기화하거나 지울 의무가 없습니다. 제 기억이 맞다면 Windows Visual C 계열에서는 debug build시 초기값을 지정하지 않은 경우, 0xCC인가... 의 값으로 초기값을 강제로 준 것 같았는데, Linux의 glibc는 그런 기능을 제공하지 않습니다. 궂이 꼭 필요하다면 malloc()/free() wrapper를 만드는 것도 한 방법입니다.
Wikipedia에 있는 ASLR도 참고하기 바랍니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
Visual C++에서는
Visual C++에서는 free를 해주면 Release에서도 이전 데이터는 깨져버리는 것 같은데...
Fedora8에서도 실행해보면, NULL로 채워버리는 것 같고요.
그냥 아래와 같은 단순한 코드로 테스트 해본것이지만요.
결국 Wrapper Class를 만들어주는게 가장 속편한 것일런지...
보안 측면에서
보안 측면에서 지워주는게 확실히 안심이 될겁니다만,
어차피 왠만해선 어디서부터 어디까지가 데이터인지 구분하기 힘듭니다. (string이 아닌 이상...)
침입자 입장에선 그걸 찾아내느니 그냥 역어셈을 하는게 *확실히* 나을겁니다.
댓글 달기