[- Disclaimer -]
아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
Error 처리 3 가지 유형
✦ 오류 처리 불필요
✧ Return 값 미존재
✧ 호출 시 항상 성공
✦ Return 값 만으로 Error 처리
✧ WSAStartup()
✦ Return 값으로 Error 발생 확인 및 Error Code 확인
✧ 대부분의 Socket()
WSAGetLastError()
✦ Error Code 확인
int WSAGetLastError(void);
Plain Text
복사
WSAGetLastError() - Ex)
if (Socket() == 실패) {
int errcode = WSAGetLastError();
printf(errcode에 해당하는 Error Message)
}
Plain Text
복사
FormatMessage()
✦ Error Code에 대응되는 Error Message 확인
✧ dwFlags
FORMAT_MESSAGE_ALLOCATE_BUFFER: Error Message 저장 공간 메모리 할당
FORMAT_MESSAGE_FROM_SYSTEM: OS로부터 Error Message 가져옴
Plain Text
복사
✦ lpSource
•
NULL
✦ dwMessageId
•
WSAGetLastError()의 Return 값 Error Code
✦ dwLanguageId
✧ Error Message 표시 Language
→ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) 사용 시 제어판 Default Language로 표시
✦ lpBuffer
✧ Error Message 주소
✦ nSize
✧ 0
✦ *Arguments
✧ NULL
// 흔히 사용되는 Parameter
DWORD FormatMessage(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list *Arguments);
Plain Text
복사
LocalFree()
✦ Error Message 할당된 메모리 반환
Error Message 확인
✦ MessageBox() 사용
void err_quit(char *msg) {
LPVOID lpMsgBuf;
FormatMesssage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL);
MessageBox(NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR);
LocalFree(lpMsgBuf);
exit(1);
}
Plain Text
복사
✦ Printf() 사용
void err_display(char *msg) {
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL);
printf("[%s] %s", msg, (char *)lpMsgBuf);
LocalFree(lpMsgBuf);
}
Plain Text
복사



