WEB开发网
开发学院软件开发C语言 关于C#静态函数什么时候被调用的问题 阅读

关于C#静态函数什么时候被调用的问题

 2010-09-30 21:00:31 来源:WEB开发网   
核心提示: 接着我们看看类型A的静态构造函数什么时候应该是什么时候被调用,继续 demo.exe的执行,关于C#静态函数什么时候被调用的问题(4),0:000>g##因为staticA()和staticB()的C#代码差不多,所以编译出来的汇编代码也是差不多#0:000>!u04e4fed8No

接着我们看看类型A的静态构造函数什么时候应该是什么时候被调用,继续 demo.exe的执行。

0:000> g
#
# 因为static A()和static B()的C#代码差不多,所以编译出来的汇编代码也是差不多
#
0:000> !u 04e4fed8
Normal JIT generated code
A..cctor()
Begin 04e4fed8, size 65
>>> 04e4fed8 cc              int     3
04e4fed9 55              push    ebp
04e4feda 8bec            mov     ebp,esp
04e4fedc 56              push    esi
04e4fedd 33f6            xor     esi,esi
04e4fedf 56              push    esi
04e4fee0 51              push    ecx
04e4fee1 52              push    edx
04e4fee2 b901000000      mov     ecx,1
04e4fee7 6a00            push    0
04e4fee9 e2fc            loop    04e4fee7
04e4feeb b8d42b3c00      mov     eax,3C2BD4h
04e4fef0 8b00            mov     eax,dword ptr [eax]
04e4fef2 85c0            test    eax,eax
04e4fef4 0f8407000000    je      04e4ff01
04e4fefa b860ad4579      mov     eax,offset mscorwks!JIT_DbgIsJustMyCode (7945ad60)
04e4feff ffd0            call    eax
04e4ff01 90              nop
04e4ff02 fc              cld
04e4ff03 90              nop
04e4ff04 90              nop
#
# 32D1200是“aaaaaaa”的地址
#
04e4ff05 b800122d03      mov     eax,32D1200h
04e4ff0a 8b00            mov     eax,dword ptr [eax]
#
# 3C2F54是类型A 的MethodTable地址
#
04e4ff0c b9542f3c00      mov     ecx,3C2F54h
04e4ff11 50              push    eax
04e4ff12 b880e04479      mov     eax,offset mscorwks!JIT_InitClass (7944e080)
04e4ff17 ffd0            call    eax
#
# 32D0D3C是类型A 的静态变量保存的地址
#
04e4ff19 b83c0d2d03      mov     eax,32D0D3Ch                            
04e4ff1e 50              push    eax
04e4ff1f b850bfa179      mov     eax,offset mscorejt!STSFLD_REF_helper (79a1bf50)
04e4ff24 ffd0            call    eax
04e4ff26 90              nop
04e4ff27 54              push    esp
04e4ff28 55              push    ebp
04e4ff29 b814000000      mov     eax,14h
04e4ff2e 50              push    eax
04e4ff2f b8e091a179      mov     eax,offset mscorejt!check_stack (79a191e0)
04e4ff34 ffd0            call    eax
04e4ff36 8b75fc          mov     esi,dword ptr [ebp-4]
04e4ff39 8be5            mov     esp,ebp
04e4ff3b 5d              pop     ebp
04e4ff3c c3              ret

接着我们看看A的静态构造函数又是什么时候被调用的,未完待续……,实在是太长了,后面的分析写续集吧!

上一页  1 2 3 4 

Tags:关于 静态 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接