Microsoft MVP성태의 닷넷 이야기
VS.NET 2005 : 새롭게 소개되는 버퍼 오버런 방지 CRT 함수들 [링크 복사], [링크+제목 복사],
조회: 11755
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기

VS.NET 2005에서 기존 VC++ 소스들을 컴파일하면 눈에 띄는 경고 중의 하나가 다음과 같은 것입니다.

d:\workshop\infopath\class\ProgramEnv.cpp(270) : warning C4996: 'sprintf' was declared deprecated
        e:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(285) : see declaration of 'sprintf'

아시다시피, sprintf 함수는 가능한 쓰지 말라는 경고입니다. 실제 헤더 파일을 살펴보면,

_CRT_INSECURE_DEPRECATE _CRTIMP int __cdecl sprintf(char *, const char *, ...);
_CRTIMP int __cdecl sprintf_s(char *, size_t, const char *, ...);

위와 같이 기존 함수와 함께 "_s"가 붙은 함수가 하나 더 생긴 것을 볼 수 있습니다.

_s의 경우, 기존 함수와 다른 것이 해당 버퍼에 대해서 "size_t" 형의 버퍼 용량을 받는 인자가 추가되었다는 것인데요. 정책적으로 버퍼 오버런을 소스 차원에서 방지하겠다는 의도입니다.

요즘, MS가 "버퍼 오버런" 에 대한 상당히 민감한 대응을 펼치고 있죠.
XP SP2에서는 버퍼 오버런으로 인한 데이터 영역에 있는 코드들의 실행을 방지하는 기술(DEP, Data Execution Prevention)을 각 CPU 업체와 함께 개발을 했지요. 인텔의 경우 아직은 지원이 안된다고 들은 것 같지만... AMD64의 경우에는 NX(No eXecution)이란 기술로 선을 보이고 있습니다.

하드웨어에서의 지원이 더욱 믿음직스럽긴 하지만, 그러한 하드웨어가 아직 일반화되지 않은 시점에서는 어쩔 수 없이 소스 차원에서 막는 수밖에 없습니다.

개인적인 판단으로, VS.NET 2005 Beta 1에서의 C/C++ 지원은 거의 완벽한 정도입니다. 특별한 상황이 아니라면 기존 프로젝트를 VS.NET 2005용으로 변환해도 무방하기 때문에, 자신의 Application을 좀 더 안전하게 만들기 위해서라도 하루 빨리 위의 CRT 함수들로 컨버팅 하실 것을 권합니다.

아래에, 대충만 뽑아봤습니다. 이 외에도, 버퍼를 입력으로 받는 모든 것들이 해당합니다.


 printf_s
 _printf_p
 _cprintf_s
 _cprintf_p
 _vcprintf_s
 _vcprintf_p
 fprintf_s
 _fprintf_p
 sprintf_s
 _sprintf_p
 _snprintf_s
 vprintf_s
 _vprintf_p
 vfprintf_s
 _vfprintf_p
 vsprintf_s
 _vsprintf_p
 _vsnprintf_s
 scanf_s
 _cscanf_s
 fscanf_s
 sscanf_s
 _snscanf_s

    _strtod_l
    _strtol_l
    _strtoul_l
    _atof_l
    _atol_l
    _atoi_l
    _atoi64_l

  _itoa_s
  _ltoa_s
  _ultoa_s


  _strtoi64_l
  _strtoui64_l
_i64toa_s
_ui64toa_s

strcat_s
strcpy_s
strlen_s
  _strxfrm_l
  strerror_s
  _strerror_s

 asctime_s
 ctime_s
 _ctime32_s
 _ctime64_s
 _strdate_s
 _strtime_s

 getenv_s
 _makepath_s
 _putenv_s
 _searchenv_s
 _splitpath_s









[최초 등록일: ]
[최종 수정일: 7/10/2021]


비밀번호

댓글 작성자
 




... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
725정성태4/22/200711483개발 환경 구성: 94. App.config 의 설정 분리 방법
724정성태4/20/200710749.NET 3.5 : 13. Orcas 베타 1 용 LINQ 예제
723정성태4/19/200711042.NET 3.5 : 12. LINQ 를 이용한 3tier 구성예
722정성태4/19/200710866Vista : 43. 레지스트리와 파일의 트랜잭션 지원
721정성태4/18/200710259개발 환경 구성: 93. Fiddler 와 VSTS WebTest
719정성태4/16/200710744Vista : 42. 리스트 뷰 컨트롤에서 항목을 선택할 때 Beep 발생
718정성태4/13/20079726개발 환경 구성: 92. 하드웨어 가상화 지원과 Virtual PC/Server
717정성태4/13/20079234.NET : 56. ASP.NET 컴파일 문제 관련 패치 공개
716정성태4/12/200710368Debug : 15. sos 를 이용한 System.Net.HttpWebRequest 패킷 살펴보기
715정성태4/10/200710090VS.NET IDE : 28. C# - 기본 참조되는 using 목록 변경
714정성태4/7/20079891개발 환경 구성: 91. 코드 == 문서화 ?
713정성태4/6/20079744개발 환경 구성: 90. VPC 크기 줄이는 방법
712정성태4/6/200710199개발 환경 구성: 89. Enterprise Library 3.0 릴리스
720정성태4/17/20079599    답변글 89.1 Policy Injection Application Block
711정성태4/5/20079964TFS : 95. Pre-caching your TFS Proxy
710정성태4/5/20079776Debug : 14. MSI 설치시 오류 로그 관련 팁
709정성태4/5/200710072.NET 3.0 : 18. WCF 호스팅 환경 구성
708정성태4/4/20079447TFS : 94. Guidance Explorer 를 이용한 Team System 커스터마이징
707정성태4/1/200710425.NET 3.0 : 17. WCF 성능 비교 자료
706정성태3/31/200710825Debug : 13. WinDbg 스크립트 사용 예제 - 연결 개체 풀링 검사
705정성태3/30/20079767TFS : 93. TFS Client 측에서의 로그 추적
704정성태3/30/20079484Debug : 12. Smart Client Application의 Performance Issue파일 다운로드1
703정성태3/29/200710369Vista : 41. IE 7 에서 "소스 보기" 하는 경우 보안 경고창 뜨는 것에 대해서.
702정성태3/28/20079496TFS : 92. Team System + Guidance Explorer
701정성태3/27/20079455개발 환경 구성: 88. 서브 프로젝트로 나뉜 웹 애플리케이션 구축 가이드
700정성태3/27/20079564Visual C++ : 9. 실행시에 Manifest 파일 선택
... 16  17  18  [19]  20  21  22  23  24  25  26  27  28  29  30  ...