通过windbg查看.net程序的加载过程

先列出我的windbg的配置

C:\WINDOWS\Symbols;
C:\Program Files\Microsoft Visual Studio8\SDK\v2.0\symbols;
srv*e:\symbols*http://msdl.microsoft.com/download/symbols;
e:\symbols;
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin

 

 

1.用dumpbin /all consoleapplication3.exe c:\aa.txt
 查看该程序内容,其中在OPTIONAL HEADER VALUES节可以看到  277E entry point (0040277E) 的字样。
2.用windbg打开该程序
执行命令lmm (list module match)命令查看程序加载的首地址.
输出结果:
0:000> lmm Consoleapplication3
start    end        module name
00400000 00408000   ConsoleApplication3 C (deferred)    

3. 00400000 + 277E = 0040277E
继续在windbg中执行反汇编命令
u 0040277E
输出结果
0:000> u 0040277E
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x277e):
0040277e ff2500204000    jmp     dword ptr [ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x2000) (00402000)]
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x2784):
00402784 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x2786):
00402786 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x2788):
00402788 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x278a):
0040278a 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x278c):
0040278c 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x278e):
0040278e 0000            add     byte ptr [eax],al
ConsoleApplication3!COM+_Entry_Point <PERF> (ConsoleApplication3+0x2790):
00402790 0000            add     byte ptr [eax],al

可以看到会用jmp命令跳转到00402000处。

4.继续用dds{Display words and symbols (memory at Addr is assumed to be a series of addresses in the symbol table)
dds = dwords (4b)
dqs = qwords (8b)} 命令查看该位置到底是什么。

0:000> dds 00402000
00402000  7900b183 mscoree!_CorExeMain
00402004  00000000
00402008  00000048
0040200c  00050002
00402010  00002098
.....

5.至此可以确定托管程序的加载是由mscoree.dll中的_CorExeMain开始的。

 

你可能感兴趣的:(.net)