본문 바로가기

전체 글359

효율적인 그리고 안전한 소켓 통신 서버 Thread pool을 이용해서 소켓 서버를 만들 때 recv하는 방법은 대체로 쉽다.Windows에서는 IOCP로, Linux에서는 epoll을 이용하면 된다.이런걸 이용한 예제는 참 많지만... 실제 서버에 적용하면 문제가 생길 가능성이 있다.TCP send의 경우 클라이언트가 데이터를 받는걸 확인해야만 return한다.(물론 전송 실패 시에는 한참 뒤에 return한다.)만약 한정된 Thread pool에서 클라이언트에게 데이터를 전송하는데 마침 전송중인 모든 클라이언트의 연결이 강제로 끊긴 다면?서버는 오랜 시간 Waiting하다가 겨우겨우 다음 데이터를 처리할 것이다.이런일이 발생할까? 고려해야 할까? 할 수도 있지만 충분히 가능한 시나리오고이걸 악용한다면 매우 쉽게 DoS공격을 할 수도 있다... 2017. 11. 13.
KiUserApcDispatcher Hooking ntdll.dll의 KiUserApcDispatcher API을 후킹하려고 시도했는데 일반적인 후킹방법으로는 프로그램이 잘못된 메모리를 참조해서 오류가 나게 되었습니다. 인터넷을 찾아보면 이런 소스도 찾아볼 수 있는데... https://github.com/blaquee/APCHook/blob/master/AntiDebugAPC/Source.cpp 일단 __forceinline(함수의 prologue을 없애기 위해) 때문에 Debug모드에서는 당연히 작동하지 않고 Release모드에서도 APC Queue을 실행시키는 SleepEx함수를 실행하면 오류가 뜹니다. 후킹된 KiUserApcDispacher에서 다른 작업을 하고 원래 KiUserApcDispatcher을 실행하면 원래함수를 call 할 때 rs.. 2017. 10. 21.
DebugActiveProcess, WaitForDebugEvent, ContinueDebugEvent 삽질기 DebugActiveProcess(pid); while(WaitForDebugEvent(&dbgEventInfo, INFINITE)){if (dbgEventInfo.dwDebugEventCode == EXCEPTION_DEBUG_EVENT){dwdbgContinueStatus = DBG_EXCEPTION_NOT_HANDLED; // 중요!}ContinueDebugEvent(dbgEventInfo.dwProcessId, dbgEventInfo.dwThreadId, dwdbgContinueStatus);} 디버거에서 Exception가 발생했을 때 DBG_EXCEPTION_NOT_HANDLED 을 설정해주지 않으면클라이언트 프로세스가 죽는다...이거때문에 오늘 4시간넘게 암걸리는줄,,,,ㅠㅠㅠㅠ 안전한 예외.. 2017. 10. 19.
SMS호스팅별 한글깨짐 확인 SMS문자전송 서비스를 이용하다가... EUC-KR에 없는 글자(예를들어 댱,뷁 뭐 이런글자들...^^) 들을 전송하면 이상하게 깨지거나 ?으로 전송되는 문제가 있었습니다. 각 SMS호스팅이 어떤 문자셋을 사용하는지 설명도 없어서... 일일이 테스트 하다가 결국엔 잘 작동하는걸 찾아냈네요~ 1. COOLSMS "회댱님!" -> "회?都?!" 이런식으로 깨집니다.. 어떤 문자셋을 사용하는지 확인해봤는데 역시나 EUC-KR을 사용합니다. (utf to euckr으로 전송한거랑 이 글자랑 hex값이 같습니다.) 처음에 coolsms을 이용해서 서비스를 시작했는데 이런 문제가 생겨서 탈락... 환불 신청 해야겠군요...ㅠㅠ 여기가 제일 저렴했는데...ㅠㅠ 문의해보았지만 고칠 생각은 없나봅니다. 참고로 기본 제공.. 2017. 7. 24.
HID Mouse Report Description 해석 // Report ID 1: Mouse buttons + scroll/pan 0x85, 0x01, // Report Id 1 0x09, 0x01, // Usage (Pointer) 0xA1, 0x00, // Collection (Physical) ============================================================= 0x95, 0x05, // Report Count (3) 0x75, 0x01, // Report Size (1) 0x05, 0x09, // Usage Page (Buttons) 0x19, 0x01, // Usage Minimum (01) 0x29, 0x05, // Usage Maximum (05) 0x15, 0x00, // Logical Minimum .. 2017. 7. 15.
Visual Studio에서 예외가 발생했습니다. 확장이 원인일 수 있습니다. 해결.. 오늘 뜬금없이 이런 오류가 뜨네요.. 1. 설정리셋 2. 프로그램추가제거에서 복구 3. 레지스트리 확인 (https://connect.microsoft.com/VisualStudio/feedback/details/546369/) 4. 심지어는 비주얼 스튜디오랑 서비스팩모두 삭제 후 재설치해도 같은증상.. 이었습니다...ㅠㅠ 제가 찾은 해결방법은 간단했습니다. C:\Users\(사용자이름)\AppData\Roaming\Microsoft\VisualStudio\버전 디렉터리를 삭제하니까 잘 되네요~ 2017. 7. 15.
반응형