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