본문 바로가기

개발 및 운영118

libcef 멈춰버리는 문제 해결 libcef을 사용하던 중...화면을 드래그하거나 특정 작업을 하거나 아니면 그냥... 멈춰버려서 뻗어버리는 경우가 있었습니다.메인스레드는 CPU을 11%정도를 계속 소비하면서... 이런 상황에 제 프로그램은 이런 구조였습니다. main()while(GetMessage(NULL, &msg, NULL, NULL)){TranslateMessage(&msg);DispatchMessage(&msg);} CEF초기화 부분cefSettings.multi_threaded_message_loop = 1; //needed for MFC projects (unless we want to implement custom message-loop)cefSettings.single_process = 1;CefInitialize(c.. 2018. 7. 2.
CodeVirtualizer 주의점 #1 CodeVirtualizer을 한국에서 사용하는 사람들이 별로 없는거 같네요.. 제가 사용해 보면서 겪고있는 일들을 기록합니다.. 1. 중첩 Virtualizer 금지VIRTUALIZER_START....VIRTUALIZER_FISH_WHITE_START....VIRTUALIZER_FISH_WHITE_END....VIRTUALIZER_END 이런 식도 그렇고 void function(){VIRTUALIZER_START...VIRTUALIZER_END} int main(){VIRTUALIZER_START...function();...VIRTUALIZER_END} 이런것도 그렇고 중첩해서 VIRTUALIZER을 하면 CodeVirtualizer프로그램이 Protect적용중에 죽던지 프로그램이 죽던지 합니다... 2017. 12. 26.
효율적인 그리고 안전한 소켓 통신 서버 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.
[JsServerSocket] Linux용 다중클라이언트 서버 라이브러리 JsServerSocket은 Linux에서 다중클라이언트 서버 프로그램 개발시 사용할 수 있는 라이브러리입니다. Server : i5-6100Client : i5-2390에서 CGCII Network TCP Test Client으로 테스트한 결과로 Connections : 4000 100ms마다 2번 1KBytes의 데이터를 송수신(ECHO)-> client에서 send/recv => 7.85MB/s / 7.85MB/s 100ms마다 10번 4Kbytes의 데이터를 송수신(ECHO)-> client에서 send/recv => 51.99MB/s / 51.89MB/s interval(10 ms) / range(3800~4000) 안에서 계속 연결과 연결해제를 반복하는 작업도 잘 작동하였습니다.수십만번 해도 .. 2017. 4. 12.
반응형