[C언어] Address Sanitizer

CaChiJ·2021년 6월 6일
0
이 글은 계속해서 내용을 추가, 보완해나갈 예정입니다.

👀 ASan?

C언어로 프로그래밍을 하다 보면 할당되지 않은 메모리에 접근하거나 이미 동적 할당된 메모리를 중복으로 free하는 실수들이 있다. 이 경우 프로그램이 어떻게 작동할 지 예측할 수 없다. 이런 경우에 코드에 어떤 문제가 있는지 알려주는 것이 바로 Address Sanitizer이다. 링크를 타고 들어가 보면 Address Sanitizer의 작동에 대한 상세한 설명을 볼 수 있다.

주요 기능

ASan이 잡아주는 주요한 오류들은 다음과 같다. (추후 업데이트 하겠다)

  1. 잘못된 인덱싱
  2. Use after free(허상 포인터 역참조)
  3. 힙 메모리 중복 해제

1의 대표적인 예시는 배열의 인덱스로 범위 밖의 수를 넣는 경우이다. 이 경우 C언어에서는 어떻게 작동할 지 예측할 수 없다. 전혀 엉뚱한 메모리에 접근하여 상상을 초월하는 결과를 내놓을 수도 있다.

2는 free된 메모리에 접근하는 경우이다. 운좋게 그 메모리에 아직 다른 변수가 할당되어 있지 않다면 문제가 없어 보일 수도 있다. 하지만 당연히문제를 일으킬 여지가 아주 많다.

3은 이미 free된 메모리를 다시 free하는 경우이다.

0개의 댓글