Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 9개 있습니다.)
디버깅 기술: 11. (Managed) Main Method에 Break Point 걸기
; https://www.sysnet.pe.kr/2/0/469

디버깅 기술: 11.1. (Managed) Main Method에 Break Point 걸기 - 내용 보강
; https://www.sysnet.pe.kr/2/0/470

디버깅 기술: 35. windbg - 분석 예: 시작하자마자 비정상 종료하는 프로세스 - NullReferenceException
; https://www.sysnet.pe.kr/2/0/996

디버깅 기술: 37. .NET 4.0 응용 프로그램의 Main 함수에 BreakPoint 걸기
; https://www.sysnet.pe.kr/2/0/1021

디버깅 기술: 59. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (1)
; https://www.sysnet.pe.kr/2/0/1586

디버깅 기술: 60. NT 서비스가 시작하자마자 디버거를 연결시키는 방법 (2)
; https://www.sysnet.pe.kr/2/0/1587

디버깅 기술: 61. NT 서비스 시작 단계에서 닷넷 메서드에 BP를 걸어 디버깅하는 방법
; https://www.sysnet.pe.kr/2/0/1598

디버깅 기술: 100. windbg - .NET 4.0 응용 프로그램의 Main 메서드에 Breakpoint 걸기
; https://www.sysnet.pe.kr/2/0/11322

디버깅 기술: 125. WinDbg로 EXE의 EntryPoint에서 BP 거는 방법
; https://www.sysnet.pe.kr/2/0/11859




.NET 4.0 응용 프로그램의 Main 함수에 BreakPoint 걸기

예전에 CLR 2.0 응용 프로그램의 Main 함수에 중지점(BreakPoint)를 거는 방법을 설명했었지요.

(Managed) Main Method에 Break Point 걸기
; https://www.sysnet.pe.kr/2/0/469

.NET 4.0을 대상으로 한다면 위의 설명에서 다소 맞지 않는 부분이 있어서 '개정판' 차원에서 ^^ 언급해 보겠습니다.

우선, mscorwks.dll 로딩 시에 BP를 걸었던 것을 clr.dll로 바꿔주는 것으로 시작합니다.

01: 0:000> sxe ld clr

'g' 명령어로 이제 clr.dll이 로드될 때까지 진행합니다.

0:000> g
ModLoad: 70070000 706e0000   C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=7efdd000 edi=001ef400
eip=7778fc52 esp=001ef2d4 ebp=001ef328 iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!ZwMapViewOfSection+0x12:
7778fc52 83c404          add     esp,4

clr이 로드되었으니, 안전하게 sos.dll을 로드해 주고,

0:000> .loadby sos clr
0:000> .chain
Extension DLL search Path:
    C:\Program Files (x86)\...[생략]...\COMMON
Extension DLL chain:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos: image 4.0.30319.225, API 1.0.0, built Thu Feb 10 13:49:57 2011
        [path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll]
    dbghelp: image 6.12.0002.633, API 6.1.6, built Tue Feb 02 05:08:26 2010
        [path: C:\...[생략]...\dbghelp.dll]
    ext: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 05:08:31 2010
        [path: C:\...[생략]...\ext.dll]
    wow64exts: image 6.1.7650.0, API 1.0.0, built Tue Feb 02 05:08:04 2010
        [path: C:\...[생략]...\wow64exts.dll]
    exts: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 05:08:24 2010
        [path: C:\...[생략]...\exts.dll]
    uext: image 6.12.0002.633, API 1.0.0, built Tue Feb 02 05:08:23 2010
        [path: C:\...[생략]...\uext.dll]
    ntsdexts: image 6.1.7650.0, API 1.0.0, built Tue Feb 02 05:08:08 2010
        [path: C:\...[생략]...\ntsdexts.dll]

RunMain 함수에 BP를 걸어주고, 해당 함수에서 멈출 때까지 'g' 키를 눌러 진행합니다.

0:000> bp clr!ClassLoader::RunMain
0:000> g
(10e0.1074): Unknown exception - code 04242420 (first chance)
ModLoad: 73750000 737b0000   C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
eax=00000000 ebx=00000000 ecx=00000002 edx=00000000 esi=7efdd000 edi=001ee164
eip=7778fc52 esp=001ee038 ebp=001ee08c iopl=0         nv up ei pl zr na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000246
ntdll!ZwMapViewOfSection+0x12:
7778fc52 83c404          add     esp,4

0:000> g
Breakpoint 0 hit
eax=001ef104 ebx=00000000 ecx=700f5b79 edx=80000001 esi=002a33f0 edi=00000000
eip=7012212f esp=001ef0cc ebp=001ef330 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00000206
clr!ClassLoader::RunMain:
7012212f 6838010000      push    138h

마지막으로 예와 다름없이 Main 메서드에 bp를 걸어주면 끝!

!bpmd ConsoleApplication1 ConsoleApplication1.Program.Main




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/23/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  [77]  78  79  80  81  82  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
12044정성태10/27/201917711오류 유형: 575. mstest.exe - System.Resources.MissingSatelliteAssemblyException: The satellite assembly named "Microsoft.VisualStudio.ProductKeyDialog.resources.dll, ..."
12043정성태10/27/201919731오류 유형: 574. Windows 10 설치 시 오류 - 0xC1900101 - 0x4001E
12042정성태10/26/201918716오류 유형: 573. OneDrive 하위에 위치한 Documents, Desktop 폴더에 대한 권한 변경 시 "Unable to display current owner"
12041정성태10/23/201920258오류 유형: 572. mstest.exe - The load test results database could not be opened.
12040정성태10/23/201920873오류 유형: 571. Unhandled Exception: System.Net.Mail.SmtpException: Transaction failed. The server response was: 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied
12039정성태10/22/201917753스크립트: 16. cmd.exe의 for 문에서는 ERRORLEVEL이 설정되지 않는 문제
12038정성태10/17/201918358오류 유형: 570. SQL Server 2019 RC1 - SQL Client Connectivity SDK 설치 오류
12037정성태10/15/201925940.NET Framework: 867. C# - Encoding.Default 값을 바꿀 수 있을까요?파일 다운로드1
12036정성태10/14/201927301.NET Framework: 866. C# - 고성능이 필요한 환경에서 GC가 발생하지 않는 네이티브 힙 사용파일 다운로드1
12035정성태10/13/201920592개발 환경 구성: 461. C# 8.0의 #nulable 관련 특성을 .NET Framework 프로젝트에서 사용하는 방법 [2]파일 다운로드1
12034정성태10/12/201920169개발 환경 구성: 460. .NET Core 환경에서 (프로젝트가 아닌) C# 코드 파일을 입력으로 컴파일하는 방법 [1]
12033정성태10/11/201924595개발 환경 구성: 459. .NET Framework 프로젝트에서 C# 8.0/9.0 컴파일러를 사용하는 방법
12032정성태10/8/201920179.NET Framework: 865. .NET Core 2.2/3.0 웹 프로젝트를 IIS에서 호스팅(Inproc, out-of-proc)하는 방법 - AspNetCoreModuleV2 소개
12031정성태10/7/201918108오류 유형: 569. Azure Site Extension 업그레이드 시 "System.IO.IOException: There is not enough space on the disk" 예외 발생
12030정성태10/5/201925194.NET Framework: 864. .NET Conf 2019 Korea - "닷넷 17년의 변화 정리 및 닷넷 코어 3.0" 발표 자료 [1]파일 다운로드1
12029정성태9/27/201925394제니퍼 .NET: 29. Jennifersoft provides a trial promotion on its APM solution such as JENNIFER, PHP, and .NET in 2019 and shares the examples of their application.
12028정성태9/26/201921033.NET Framework: 863. C# - Thread.Suspend 호출 시 응용 프로그램 hang 현상을 해결하기 위한 시도파일 다운로드1
12027정성태9/26/201915655오류 유형: 568. Consider app.config remapping of assembly "..." from Version "..." [...] to Version "..." [...] to solve conflict and get rid of warning.
12026정성태9/26/201921989.NET Framework: 862. C# - Active Directory의 LDAP 경로 및 정보 조회
12025정성태9/25/201920289제니퍼 .NET: 28. APM 솔루션 제니퍼, PHP, .NET 무료 사용 프로모션 2019 및 적용 사례 (8) [1]
12024정성태9/20/201922241.NET Framework: 861. HttpClient와 HttpClientHandler의 관계 [2]
12023정성태9/18/201922656.NET Framework: 860. ServicePointManager.DefaultConnectionLimit와 HttpClient의 관계파일 다운로드1
12022정성태9/12/201926207개발 환경 구성: 458. C# 8.0 (Preview) 신규 문법을 위한 개발 환경 구성 [3]
12021정성태9/12/201942298도서: 시작하세요! C# 8.0 프로그래밍 [4]
12020정성태9/11/201925261VC++: 134. SYSTEMTIME 값 기준으로 특정 시간이 지났는지를 판단하는 함수
12019정성태9/11/201918966Linux: 23. .NET Core + 리눅스 환경에서 Environment.CurrentDirectory 접근 시 주의 사항
... 76  [77]  78  79  80  81  82  83  84  85  86  87  88  89  90  ...