검색결과 리스트
글
stack overrun
Programming/C/C++
2014. 6. 19. 16:42
http://www.microsoft.com/korea/msdn/columns/contents/CodeSecure/secure05202002/default.aspx
메모리를 검색합니다. 어떻게 szName 과 cbName이 유효하다는 것을 알게 되었습니까? 사용자가 올바른 값을 제공한다고 믿으십니까? 일반적으로 대답은 아니요입니다. 버퍼 크기가 올바른지 확인할 수 있는 간단한 방법은 메모리를 검색하는 것입니다. 다음 코드 조각은 코드의 디버그 버전에서 이를 수행할 수 있는 방법을 보여줍니다. void Function(char *szName, DWORD cbName) { char szBuff[MAX_NAME]; #ifdef _DEBUG // 검색 memset(szBuff, 0x42, cbName); #endif // szName 복사 및 사용 if (cbName < MAX_NAME) strncpy(szBuff,szName,MAX_NAME-1); } 이 코드에서는 대상 버퍼에 0x42 값을 씁니다. 버퍼를 복사하는 대신 이렇게 하는 이유가 의아할 것입니다. 대상 버퍼 끝에 알려진 고정된 값을 쓰면 소스 버퍼가 너무 클 경우 코드가 실패할 수 있습니다. 개발 프로세스 초기에 개발 버그를 찾을 수도 있습니다. 공격자의 악의적인 부분을 실행하는 대신 실패로 끝나는 것이 더 낫습니다. 이 때문에 공격자의 버퍼를 복사하지 않으려는 것입니다. 참고 테스트 중에 버퍼 오버런을 가져오는 것을 도와주기 위해 디버그 빌드에서만 이를 수행해야 합니다.
'Programming > C/C++' 카테고리의 다른 글
Memory Bandwidth (0) | 2014.06.30 |
---|---|
비디오 메모리 구하기 (0) | 2014.06.24 |
[WinAPI] 컴퓨터 각종 부품 정보 알아내기 (1) | 2014.06.22 |
GlobalMemoryStatusEx (0) | 2014.06.22 |
operator new (0) | 2014.06.14 |