C++빌더에서도 보안 관련 함수를 지원합니다.
제가 가지고 있는 2010 이나 XE 버전 에서 지원되는 것을 확인했으며, 그 이 후 버전은 모두 지원할 겁니다.
문의 주신 memcpy_s의 경우 C++빌더에서는 VC++와는 다르게 리턴형이 error_t형이 아니라 void *형입니다.
다음과 같이 사용하면 VC++와 C++빌더에 호환성을 가질 것입니다.
if( memcpy_s(dest, sizeof(dest), src, sizeof(src) ) ){
//정상
}else{
//오류
}
주의하실것은 단순변수나 배열과 같이 크기가 고정인 경우에는 sizeof연산자를 사용하면 되지만, 동적으로 할당받은 경우에는 sizeof연산자를 사용하면 안 됩니다. 할당된 메모리의 크기를 입력해야합니다.
다음 함수들은 C++빌더에서 지원하는 보안 함수입니다. 기존 함수대신 사용하는 것을 적극 추천해 드립니다.
이런 함수를 사용하면, 찾기 힘든 버그나 보안 관련 문제를 미연에 방지할 수 있습니다.
Secure C Library
-----------------------------------------------------
stdio.h
-----------------------------------------------------
Input/output Routines
* tmpfile_s
* tmpnam_s
File access functions
* fopen_s
* freopen_s
Formatted input/output functions
* fprintf_s, fwprintf_s
* fscanf_s, fwscanf_s
* printf_s, wprintf_s
* scanf_s, wscanf_s
* snprintf_s, snwprintf_s
* sprintf_s, swprintf_s
* sscanf_s, swscanf_s
* vfprintf_s, vfwprintf_s
* vfscanf_s, vfwscanf_s
* vprintf_s, vwprintf_s
* vscanf_s, vwscanf_s
* vsnprintf_s, vsnwprintf_s
* vsprintf_s, vswprintf_s
* vsscanf_s, vswscanf_s
Character input/output functions
* gets_s
-----------------------------------------------------
stdlib.h
-----------------------------------------------------
Runtime-constraint handling
* set_constraint_handler_s
* abort_handler_s
* ignore_handler_s
Communication with the environment
* getenv_s, wgetenv_s
Searching and sorting utilities
* bsearch_s
* qsort_s
-----------------------------------------------------
string.h
-----------------------------------------------------
Copying functions
* memcpy_s
* memmove_s
* strcpy_s, wcscpy_s
* strncpy_s, wcsncpy_s
Concatenation functions
* strcat_s, wcscat_s
* strncat_s, wcsncat_s
Search functions
* strtok_s, wcstok_s
Miscellaneous functions
* strerror_s, _wcserror_s
* strerrorlen_s
-----------------------------------------------------
time.h
-----------------------------------------------------
Time conversion functions
* asctime_s, wasctime_s
* ctime_s, wctime_s
* gmtime_s
* localtime_s
질문고수 님이 쓰신 글 :
: c표준에서 memcpy()는 쓰지말고 보안상 더 좋은 memcpy_s()를 사용하라라고 들었습니다
:
: 그래서 memcpy()로 짜여져 있는 소스를 memcpy_s()로 치환하고 있는데
:
: 의외로 어떻게 바꿔야 하는지 명확하게 정리된 사이트가 없어서 이곳에 질문합니다.
:
: 아래형식과 같이 변경 하면 될까요?
:
:
: 이것을 memcpy(dest,src,sizeof(src));
:
: 이것과 같이 errno_t e = memcpy_s(dest, sizeof(dest), src, sizeof(src));
:
: 고수님들의 조언 부탁드립니다