타입에 따른 접근 규칙
같은 메모리를 서로 다른 타입의 포인터로 읽고 쓰는 방식에는 언어 규칙과 예외가 있다. 겉보기에 동작하더라도 규칙을 어기면 컴파일러 최적화의 가정과 충돌할 수 있다. TypeSanitizer는 이런 접근을 찾는 데 초점을 둔다.
그림자 정보의 활용
메모리 주소에 대응하는 타입 설명 정보를 따로 유지하고 접근 시 관계를 확인한다. 단순한 주소 유효성 검사와는 목적과 정보가 다르다. 버퍼 안쪽에 접근했다는 사실만으로 타입 규칙까지 올바르다고 판단할 수는 없다.
계측 비용과 범위
추가 메타데이터와 접근 검사는 상당한 메모리 및 실행 비용을 만들 수 있다. 실제 비용은 코드의 접근 패턴과 구성에 달려 있다. 실행한 경로의 결과로 해석하고 지원 조건과 외부 코드의 계측 범위를 확인하며 다른 메모리 검사와 구분해 사용한다.
관련 문서
AddressSanitizer / MemorySanitizer / DataFlowSanitizer / Clang