• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

heap overflow 예시에서

24.02.20 21:12 작성 조회수 113

0

예시를 똑같이 작성하고 실습하였는데 아무리 시도를 해도 HEAP CORRUPTION DETECTED라는 내용은 안 나오고 중단점 명령 실행됨(중단점 명령이 ....exe에서 실행되었습니다)이라고만 나오는데

 

이 2개가 동일한 의미인가요?

답변 1

답변을 작성해보세요.

1

Visual Studio 버전에 따라 다를 수 있으니 신경쓰지 마세요!

한울님의 프로필

한울

질문자

2024.02.21

1가지 더 궁금한 것이 있습니다

void* pointer = malloc();에서 malloc에

4를 입력하면 언급했던 내용이 나오고

12를 입력하면 정상적으로 종료되지만

8을 입력하면 이 경우에도 유효한 heap 범위를 초과하게 될 텐데 언급했던 내용이 나오지도 않고 정상적으로 종료되지도 않은 채 가만히 멈춰있는 것 같습니다(진단 세션 시간은 계속 증가)

이유가 무엇일까요?

우선 1 번 작성하셨으면 그냥 놔두시면 제가 시간 될 때 답변 드립니다.

질문주신 부분은 힙 할당 관련 내용인데
heap corruption은 애당초 추적을 하는 것이 100%가 아닙니다.
디버깅 모드라면 특정 값 (ex. 0xCC)를 이용해 지뢰밭을 설치해서
해당 부분이 수정 되었는지로 판별하지만,
애당초 이건 정확하지도 않고 디버그 모드에서만 작동하는 것이라 신뢰할 수 없습니다.
즉 터지지 않아도 문제가 없는게 아니라는겁니다.

그리고 할당하는 크기에 따라 메모리 할당 위치 및 다른 메모리 할당이 근처에 있는지 등
여러가지가 달라지기 때문에 딱히 왜? 라고 대답하기 힘듭니다.