[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법
[C/C++] clock vs gettimeofday Linux와 Windows의 코드 실행 시간 측정 방법
2020.05.03windows program을 주력으로 개발하다 보니 자연스럽게 사용하던 clock을 이용하여 시간을 측정했습니다. 그런데 linux에서도 똑같이 시간을 측정했는데 system() API를 사용한 부분이 예상 시간이랑 너무나도 차이가 있더라고요... 확인해보니 리눅스에서의 시간 측정 방법이 잘못된 거였습니다. LINUX에서 실행 시간 측정 clock() CPU의 시간을 측정하는 API입니다. 즉, 프로세스가 CPU를 점유하지 않을 때는 시간이 측정되지 않게 되는데요, sleep(), system() API 등 CPU가 점유하지 않는 API를 사용한 시간은 측정이 되지 않습니다. gettimeofday() wall clock time이라고 하여 동작 시간을 측정하는 방식입니다. CPU의 동작 시간만을 확인..
[C/C++] InternetReadFile Simple File Download.
[C/C++] InternetReadFile Simple File Download.
2020.03.04복잡한 Socket 통신을 하지 않고 인터넷 URL 또는 Network에 공유된 파일을 다운로드하려면 어떻게 하면 좋을까요? MSDN에 보시면 아주 간단하게 사용할 수 있는 InternetReadFile API를 제공하고 있습니다. 해당 API는 파일을 다룰 때 사용하는 ReadFile과 매우 유사하게 동작하기 때문에 파일을 조금 다루어보셨다면 어렵지 않게 다룰 수 있을 거예요. 사용 전 가장 먼저 해주어야 할 행동은 역시 header를 include 해주는 것인데요, wininet을 사용하므로 lib로 링크해주어야 합니다. 이제 아주 간단한 방법으로 URL에 있는 파일을 로컬 파일로 저장하도록 해봅시다. 주의 : wininet을 사용하는 경우 서버 또는 service process에는 사용하면 안 됩니..
[C/C++] 윈도우10 Boost 최신버전 설치 및 사용법
[C/C++] 윈도우10 Boost 최신버전 설치 및 사용법
2019.07.27Boost Library Download and Build C++ 필수 라이브러리 중 Boost Library에 대해 설치 및 사용법을 정리합니다. Boost는 공식 홈페이지에서 다운로드 가능하며, 주기적으로 업데이트가 되고 있습니다. https://www.boost.org/users/download/ Boost Downloads Current Release Version 1.70.0 April 12th, 2019 06:04 GMT New Libraries: Outcome, Histogram. Updated Libraries: DownloadsPlatformFileSHA256 Hash unixboost_1_70_0.tar.bz2430ae8354789de4fd19ee52f3b1f739e1fba576f0ad..
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마무리)
[C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마무리)
2019.07.25마우스 후킹을 이용한 매크로 프로그램 제작 저번 포스팅에 이어 이번에도 마우스 후킹에 관련된 내용입니다. 아직 못 보셨다면 기본 마우스 후킹에 대한 내용을 보시고 보셔도 좋습니다. https://wendys.tistory.com/110 [C/C++] 윈도우 마우스 후킹으로 제스처 인식 프로그램 만들기 (마우스 이동 방향 및 각도 구하기) 마우스 후킹을 이용한 매크로 프로그램 제작 저번 포스팅에 이어 이번에도 마우스 후킹에 관련된 내용입니다. 아직 못 보셨다면 기본 마우스 후킹에 대한 내용을 보시고 보셔도 좋습니다. https://wendys.tistory... wendys.tistory.com 드디어 마무리 시간입니다. 이제 마우스의 이동 거리의 계산을 통한 방향 확인이 가능해진 시점에서 해야 할 일은 ..
[C/C++] 윈도우 메시지 후킹 마우스를 지배하는자 (windows mouse message hooking)
[C/C++] 윈도우 메시지 후킹 마우스를 지배하는자 (windows mouse message hooking)
2019.07.21실전 윈도우 메시지 후킹 - 마우스를 지배하는 자 이제부터 실전입니다. 메시지 후킹에는 마우스 메시지, 키보드 메시지, 그 외 모든 윈도우 메시지를 가로챌 수 있습니다. 예를 들면 키보드 메시지 후킹을 이용한 기술은 키로거를 만들기도 하고, 매크로 키보드를 만들기도 하며, 특정 키보드 키를 바꾸기도 합니다. 그럼 마우스 후킹으로는 무엇을 할 수 있을까요?? 특별히 많은걸 할 수 있지는 않습니다. 원하는 경우 오토 클릭을 할 수 있을 테고, 아니면 마우스 움직임에 따라 동작하는 매크로 등이 있을 수 있습니다. 이번 포스팅에서는 마우스 움직임에 따라 스크롤을 내리거나 올리고 창을 닫는 등 마우스 제스처 매크로 프로그램을 만들어 볼 계획입니다. (사실은 개인적으로 만들어서 사용하고 있는 툴 중 가장 만족도가 ..
[C/C++] 윈도우 후킹을 하기 전에 알아야 할 DLL Main에서 하면 안되는 5가지 작업
[C/C++] 윈도우 후킹을 하기 전에 알아야 할 DLL Main에서 하면 안되는 5가지 작업
2019.07.16WIndows Message Hooking 하기에 앞서 DLL Main에서 하면 안 되는 작업 최근 주력 업무 및 시스템 분석을 하게 되면서 DLL Main 에서 몇 가지 동작들에 의해서 문제가 발생한 적이 많이 있어서 정확하게 정리를 했습니다. 후킹을 하기위해 DLL을 로드했을 때 보장되어있는 상황은 Kernel32.dll 이 로드되어있다는 보장 외에는 보장된 상황이 없습니다. 그렇다면 어떠한 상황들에서 어떠한 문제가 생길까요?? 가장 큰 문제는 해당 DLL에 데드락(Dead Lock)이 걸리게 되어 더 이상 흐림이 진행되지 못하여 프로그램이 실행되지 못하는 상황이 발생할 수 있습니다. 주의사항 LoadLibrary, LoadLibraryEx 등을 호출하게되면 데드락 또는 크래시를 유발할 수 있습니다...
[C/C++] URL 전달을 위한 urlencode & urldecode
[C/C++] URL 전달을 위한 urlencode & urldecode
2019.07.11이번에 크로미움 등 브라우저 URL 전달 시 특수문자, 한글 등 문제 때문에 필요해서 만들어보았습니다. 다른 encoder, decoder에 비해 간단하게 제작이 가능하며, 더 좋은 방법이 있으면 댓글로 달아주세요 :) URL 전달을 위한 urlencode & urldecode 인터넷에서의 URL은 ASCII 문자열을 이용해서만 전송될 수 있는데, 그렇지 않게 전송한 경우 브라우저의 특성에 따라 question mark(?), ampersand(&), 슬래시(/), 공백 문자 같은 특수문자의 경우 잘리거나 의도치않게 변형이 될 수 있습니다. 그래서 이런 특수문자는 인코딩이 되는 것이 좋습니다. ASCII에 포함되지 않는 문자들(한글, 일본어 등등)은 더욱 encoding이 필요하게 됩니다. 인코딩은 %o..
[C/C++] process crash 로그 및 덤프 남기기 (access violation)
[C/C++] process crash 로그 및 덤프 남기기 (access violation)
2019.07.06윈도우 개발을 하다 보면 완벽한 프로그램을 만들기를 희망하지만 경험에 의해서, 예외상황에 의해서 프로세스에 문제가 발생하기 마련입니다. __try __exception 을 두는 것에서 한계가 있고 access violation 문제인 경우 특정 옵션을 켜지 않는 이상 __try __exception에서 잡히지 않게 되고, 고객이 사용 중에 문제가 발생한 경우 로그보다 더욱 많은 자료가 기록되어있는 dump 파일을 받을 수 있기 때문에 덤프를 사용합니다. 그렇다면 어떻게 이런 access violation을 포함한 모든 상황에서 process crash가 나는 예외상황을 캐치할 수 있을까요? msdn에 보면 SetUnhandledExceptionFilter API를 제공하고있습니다. SetUnhandled..
[C/C++] 작업표시줄 아이콘 깜빡이게 하기 (FlashWIndow)
[C/C++] 작업표시줄 아이콘 깜빡이게 하기 (FlashWIndow)
2019.07.03카카오톡 쪽지 또는 백그라운드 작업 후 완료되었음을 사용자에게 알려주기 위한 방법 중에 한 가지입니다. 해당 기능을 위해서는 FlashWindowEx라는 API를 사용하게 됩니다. MSDN을 참고하게 되면 다음과 같은 설명이 있습니다. MSDN HOMEhttps://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-flashwindowex FlashWindowEx function Flashes the specified window. It does not change the active state of the window. 즉, 작업표시줄에 지정된 윈도를 깜빡이게 하지만 창을 활성화 화지는 않는다는 얘기죠 해당 API를 사용하면서 주의하실 점 T..
[C/C++] DLL injection. 다른 Process에 내 DLL Load 하기
[C/C++] DLL injection. 다른 Process에 내 DLL Load 하기
2016.01.03DLL Injection기본적으로 내가 만든 Process에 DLL을 Load하는 방법은 간단합니다. 그냥 일반적으로 사용하면 되죠 하지만 다른 Process에 내가 원하는 기능을 동작하게 하고싶은 경우엔 어떻게 해야할까요?? 특별한 방법을 사용하여 내가만든 DLL을 다른 Process에서 Load 하여 DllMain에서 필요한 기능을 실행해버리는겁니다. 정상적으로 DLL을 Load했으니 해당 Process의 메모리에 대한 접근 권한을 갖기때문에 여러가지 동작이 가능합니다. 그 특별한 방법이 어떤건지 code로 보겠습니다. DLL Injection code #include #include #include bool process_name_to_pid( __out DWORD& pid, __in const s..
__cdecl, __stdcall, __fastcall x86 호출 규약(Calling Convention)
__cdecl, __stdcall, __fastcall x86 호출 규약(Calling Convention)
2016.01.01Calling Convention X86에선 호출 규약이 __cdecl, __stacll, __fastcall 등으로 나누어있지만 x64에선 __fastcall 하나의 호출 규약만을 사용하도록 정의 되어있습니다. (__fastcall은 x86 전용이라고 합니다. x64는 추후 다시 정리하겠습니다!)오늘은 x86 호출 규약에 대해서만 정리를 해보겠습니다. 함수 호출규약을 아무것도 입력하지 않으면 기본값은 __cdecl 입니다.해당 테스트는 Visual Studio 2015 Community 에서 이루어졌습니다. __cdecl (c declaration) 이 규약에서 호출자는 스택에서 인수를 정리하며, printf() 와 같은 가변 인자 함수를 지원합니다.함수의 호출시 함수 호출 전과 함수가 끝난 후의 ES..
[C/C++] FormatMessage 윈도우 GetLastError를 메시지로!!
[C/C++] FormatMessage 윈도우 GetLastError를 메시지로!!
2015.12.29GetLastError() code to Message Windows 프로그램 개발시 API를 사용하다보면 에러가 났을때 문제를 확인하기 위하여 GetLastError() 를 사용합니다. 하지만 해당 API는 DWORD 로 넘어오기때문에 자주 사용해서 기억하는 코드가 아니면 MSDN HOME https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms681381(v=vs.85).aspx 위 사이트를 이용하여 Error Number와 Message를 비교해야 합니다. 이 때, 디버그 로그를 기록하거나 메시지를 바로바로 보고싶은 경우 이러 번거로움을 해소하기 위하여 FormatMessage API를 사용합니다. Windows 는 Error Number를 문자열로..