Visual C++ 2005에서는 CRT함수들이 ‘_s’ 꼬리를 달고 새로 작성됐다. 대표적인 특징이라면, 버퍼의 크기를 파라미터로 넘겨준다는 것인데, 예를 들어 memcpy함수의 경우 destination buffer의 크기를 명시하는 값이 파라 미터로 추가되는 식이다. 따라서 memcpy_s함수의 프로토타입은 다음과 같이 선언된다.
1 2 3 4 5 6 |
errno_t memcpy_s( void *dest, size_t sizeInBytes, const void *src, size_t count ); |
감히, MSDN을 무시하고 이런 함수를 사용한다면…, 적어도 나의 경우에는, 당연히 Buffer Overflow를 방지할 수 있도록 수정된 것이라고 기대했다. 나라면 분명히 그렇게 했을 것이다. 그러나 Microsoft는 그렇게 하지 않았다.
It should also be noted that the secure functions do not prevent or correct security errors; rather, they catch errors when they occur. They perform additional checks for error conditions, and in the case of an error, they invoke an error handler. ((Security Enhancements in the CRT , MSDN))
즉, 에러를 보안오류를 해결해주진 않고, 그 에러에 대한 처리를 할 수 있도록 해준다는 것이다. MSDN을 좀 더 살펴보면, _set_invalid_parameter_handler함수를 사용한 예제가 나오긴 한다. 근데, 그렇게 하는 게 정말 좋은 거야?
결론…,
감히 MSDN을 무시해? 넌 당해도 싸!