malloc으로 할당하고 free로 동적할당공간을 해제해도, 그 데이터 값이 그대로 남아있는데, 컴퓨터가 자동으로 새로운 메모리로 할당해 주는건가요?
아뇨. free()가 하는 일은 이제 더 이상 할당된 공간을 쓸 일이 없다는 것을 OS에 알려 줄 뿐이지 할당된 공간에 있는 데이터를 지우지는 않습니다. malloc() 다음에 bzero()를 호출하거나, calloc()을 사용하는 이유 중 하나가 malloc()으로 할당받은 공간이 모두 비어 있다는 보장이 없기 때문입니다.
그래서 데이터 값이 남아 있다고 해서 그 데이터를 사용하면 Use-after-free 문제가 발생합니다.
https://security.stackexchange.com/questions/45966/i-dont-quite-understand-the-principle-of-use-after-free-and-cve-2010-1119
허상포인터가 되어버리는 거라고 이해해도 되는거지요?
어려운 말 쓰지 마시고 free()한 메모리에는 손 대면 안 된다고만 이해하셔도 됩니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
아뇨. free()가 하는 일은 이제 더 이상 할당된
아뇨. free()가 하는 일은 이제 더 이상 할당된 공간을 쓸 일이 없다는 것을 OS에 알려 줄 뿐이지 할당된 공간에 있는 데이터를 지우지는 않습니다. malloc() 다음에 bzero()를 호출하거나, calloc()을 사용하는 이유 중 하나가 malloc()으로 할당받은 공간이 모두 비어 있다는 보장이 없기 때문입니다.
그래서 데이터 값이 남아 있다고 해서 그 데이터를 사용하면 Use-after-free 문제가 발생합니다.
https://security.stackexchange.com/questions/45966/i-dont-quite-understand-the-principle-of-use-after-free-and-cve-2010-1119
허상포인터가 되어버리는 거라고 이해해도 되는거지요?
허상포인터가 되어버리는 거라고 이해해도 되는거지요?
어려운 말 쓰지 마시고 free()한 메모리에는 손
어려운 말 쓰지 마시고 free()한 메모리에는 손 대면 안 된다고만 이해하셔도 됩니다.
댓글 달기