부모글 보이기/감추기 AD BLOCK 해제 요청 이 글에는 광고가 많이 들어가 있지 않습니다. adblock을 해제하셔도 글을 읽는데 그다지 부담이 없으니 해제를 부탁드립니다. (닷넷) 프로세스(EXE)에 디버거가 연결되어 있는지 아는 방법 닷넷의 경우 BCL에 Debugger.IsAttached 속성을 통해 디버거 연결 여부를 알아낼 수 있습니다. Debugger.IsAttached Property ; https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debugger.isattached?view=netframework-4.8 그런데 "Debug Diagnostic Tool"로 프로세스를 연결한 경우에는, 프로세스 비정상 종료 시 "Debug Diagnostic Tool"를 이용해 덤프를 남기는 방법 ; https://www.sysnet.pe.kr/2/0/1786 Debugger.IsAttached가 false를 반환합니다. 이유를 찾아보니 다음의 글에 나오는 군요. ^^ #if (DEBUG) VS System.Diagnostics.Debugger.IsAttached ; https://stackoverflow.com/questions/7073266/if-debug-vs-system-diagnostics-debugger-isattached C# Detect if Debugger is Attached ; https://www.codeproject.com/articles/670193/csharp-detect-if-debugger-is-attached 즉, Debugger.IsAttached는 'managed debugger'가 연결되었을 때만 True이고, 'native debugger'가 연결된 경우에는 false를 반환한다고 합니다. 따라서 이런 경우에는 IsDebuggerPresent Win32 API를 P/Invoke 호출로 사용하면 됩니다. IsDebuggerPresent function ; https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent 이 함수는 managed/native 상관없이 디버거 연결 여부를 반환합니다. 이 외에 이름이 약간 혼란스러운 API도 있습니다. CheckRemoteDebuggerPresent ; https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-checkremotedebuggerpresent BOOL WINAPI CheckRemoteDebuggerPresent( _In_ HANDLE hProcess, _Inout_ PBOOL pbDebuggerPresent ); 함수 이름만 보면, 왠지 "원격 디버깅"으로 연결된 것인지를 알려주는 API인 듯싶은데 그게 아니라 디버거 연결 여부를 알고 싶은 프로세스가 다를 때 사용하는 함수입니다. 가령, 자신이 만든 디버거로 다른 프로세스를 연결하고 싶을 때 해당 프로세스가 이미 다른 디버거에 의해 연결되어 있다면 이를 사용자에게 알려줘야 할 것입니다. 바로 이럴 때 CheckRemoteDebuggerPresent의 첫 번째 인자에 해당 프로세스의 핸들 값을 전달하면 되는 것입니다. 결국 IsDebuggerPresent API는 CheckRemoteDebuggerPresent로 다음과 같이 동일하게 구현할 수 있습니다. BOOL pbIsPresent = FALSE; CheckRemoteDebuggerPresent(GetCurrentProcess(), &pbIsPresent); // == IsDebuggerPresent [이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.] [다음 글] VC++: 120. std::copy 등의 함수 사용 시 _SCL_SECURE_NO_WARNINGS 에러 발생[이전 글] 기타: 68. "시작하세요! C# 6.0 프로그래밍: 기본 문법부터 실전 예제까지" 구매하신 분들을 위한 C# 7.0/7.1 추가 문법 PDF [최초 등록일: 9/30/2017] [최종 수정일: 7/9/2020] 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다. by SeongTae Jeong, mailto:techsharer at outlook.com 비밀번호 댓글 작성자 2017-10-12 05시34분 [윤현수] 제가 프로젝트를 하면서 디버깅에 관심이 많아졌습니다. 헌데 아무것도 모르고 그냥 VS툴에서 사용하는 간단한 디버깅만 할줄 아는 상태여서 공부좀하려고 합니다.서적을 보고 공부를 하려고 하는데 추천해주실만한 책이 있는지요. [guest] 2017-10-12 08시43분 아래의 책을 추천하고 싶은데 현재는 절판 상태군요.DEBUGGING APPLICATIONS FOR .NET AND WINDOWS존 로빈스 저 / 서우석 역또는 아래의 책도 괜찮겠습니다.IT EXPERT 리버스 엔지니어링 2권 디버거 편 윈도우 실행 파일 구조와 원리로 배우는 ; http://www.yes24.com/24/Goods/36151547 정성태 2017-10-12 01시36분 [책] 감사합니다. 중고로도 있어서 아쉬운데로 중고로 구매했습니다. [guest] 2020-08-30 09시13분 Windows User Mode Debugging Internals; http://www.openrce.org/articles/full_view/24Windows Native Debugging Internals; http://www.openrce.org/articles/full_view/25Kernel User-Mode Debugging Support (Dbgk); http://www.openrce.org/articles/full_view/26; 위의 3가지 링크에 대한 번역본http://hisjournal.net/doc/Windows_Debugging_Intrenals_A_to_Z_by_6l4ck3y3.pdf 정성태 ... 106 107 108 109 110 111 112 113 [114] 115 116 117 118 119 120 ... NoWriterDateCnt.TitleFile(s) 11109정성태11/17/201623045.NET Framework: 625. ASP.NET에서 System.Web.HttpApplication 인스턴스는 다중으로 생성됩니다.11108정성태11/13/201622107.NET Framework: 624. WPF - Line 요소를 Canvas에 위치시켰을 때 흐림(blur) 현상111107정성태11/9/201626424오류 유형: 371. Post cache substitution is not compatible with modules in the IIS integrated pipeline that modify the response buffers.111106정성태11/8/201626657.NET Framework: 623. C# - PeerFinder를 이용한 Wi-Fi Direct 데이터 통신 예제 [2]111105정성태11/8/201621148.NET Framework: 622. PeerFinder Wi-Fi Direct 통신 시 Read/Write/Dispose 문제11104정성태11/8/201620021개발 환경 구성: 305. PeerFinder로 Wi-Fi Direct 연결 시 방화벽 문제11103정성태11/8/201620509오류 유형: 370. PeerFinder.ConnectAsync의 결과 값인 Task.Result를 호출할 때 System.AggregateException 예외 발생11102정성태11/8/201620575오류 유형: 369. PeerFinder.FindAllPeersAsync 호출 시 System.UnauthorizedAccessException 예외 발생11101정성태11/8/201622782.NET Framework: 621. 닷넷 프로파일러의 오류 코드 - 0x8013136311100정성태11/7/201630395개발 환경 구성: 304. Wi-Fi Direct 지원 여부 확인 방법 [1]11099정성태11/7/201632267.NET Framework: 620. C#에서 C/C++ 함수로 콜백 함수를 전달하는 예제 코드111098정성태11/7/201621513오류 유형: 368. 빌드 이벤트에서 robocopy 사용 시 $(TargetDir) 매크로를 지정하는 경우 오류 발생11097정성태11/7/201624533오류 유형: 367. go install: no install location for directory [...경로...] outside GOPATH11096정성태11/6/201627975디버깅 기술: 83. PDB 파일을 수동으로 다운로드하는 방법11095정성태11/6/201624645.NET Framework: 619. C# - Cognitive Services 중의 하나인 Face API를 사용해 얼굴 인식 및 흐림(blur) 효과 적용 [1]111094정성태11/5/201626321VC++: 105. Visual Studio 2013/2015 - Ceemple OpenCV 확장을 이용한 웹캠 영상 출력11093정성태11/4/201626191웹: 34. Edge 브라우저도 지원하는 클립보드 복사를 위한 자바스크립트 코드11092정성태11/3/201633276.NET Framework: 618. C# - NAudio를 이용한 MP3 파일 재생 [5]111091정성태11/3/201627081VC++: 104. std::call_once를 이용해 thread-safe한 Singleton 객체 생성111090정성태11/1/201628627VC++: 103. C++ CreateTimerQueue, CreateTimerQueueTimer 예제 코드 [9]111089정성태11/1/201628421디버깅 기술: 82. Windows 10을 위한 Symbol(PDB) 파일 내려받는 방법 [2]11088정성태11/1/201631611.NET Framework: 617. C# - AForge.NET을 이용한 MP4 동영상 파일 재생 [7]111087정성태11/1/201625927.NET Framework: 616. AForge.Video.FFMPEG를 최신 버전의 ffmpeg 파일로 의존성을 변경하는 방법111086정성태11/1/201620305오류 유형: 366. The Microsoft Passport Container service terminated with the following error: General access denied error11085정성태10/27/201635120.NET Framework: 615. C# - AForge.NET을 이용한 웹캠 영상 출력 [2]111084정성태10/26/201622884오류 유형: 365. The User Profile Service service failed to the sign-in. ... 106 107 108 109 110 111 112 113 [114] 115 116 117 118 119 120 ...