C# - 프로퍼티로 정의하면 필드보다 느릴까요? - windbg / ollydbg
오~~~ 재미있는 의견이 올라왔습니다. ^^
"
Visual Studio의 Disassembly는 어셈블리 코드를 최적화해서 보여주더라구요.
"
얼핏 생각하기에는 Visual Studio가 그럴 수 있을까??? 라는 생각이 듭니다. 사실, 역어셈블러를 만드는 것이 바이트에 따라 Intel 명령어 셋을 그대로 해석해야만 맞아들어가기 때문에 중간에 어떤 변조를 하게 되면 뒤이어 줄줄이 깨지기 때문입니다.
그래도 확인을 해봐야 합니다. ^^ 그래서, 이번에는 windbg로 해 보았습니다.
역시
지난번 예제를 x86/Release 빌드로 해서 실행한 후 windbg로 attach 시켰습니다.
sos를 로드하고,
0:007> .loadby sos clr
Form1_Load 메서드의 JIT 컴파일된 함수의 주소를 알아내서,
0:007> !name2ee *!WindowsFormsApplication1.Form1.Form1_Load
Module: 72511000
Assembly: mscorlib.dll
--------------------------------------
Module: 00562ed4
Assembly: WindowsFormsApplication1.exe
Token: 06000006
MethodDesc: 005663a8
Name: WindowsFormsApplication1.Form1.Form1_Load(System.Object, System.EventArgs)
JITTED Code Address: 00820198
--------------------------------------
Module: 6dac1000
Assembly: System.Windows.Forms.dll
--------------------------------------
Module: 6ff91000
Assembly: System.Drawing.dll
--------------------------------------
Module: 71b01000
Assembly: System.dll
그 주소를 역어셈블해 보았습니다.
0:007> u 00820198
00820198 55 push ebp
00820199 8bec mov ebp,esp
0082019b 56 push esi
0082019c 8bf1 mov esi,ecx
0082019e ff3584212003 push dword ptr ds:[34B2184h]
008201a4 6a00 push 0
008201a6 6a00 push 0
008201a8 6a00 push 001fd01aa 6a00 push 0
008201aa 6a00 push 0
008201ac 8b158c212003 mov edx,dword ptr ds:[34B218Ch]
008201ae 33c9 xor ecx,ecx
008201b4 e81d1fc46b call System_Windows_Forms_ni+0x1520d8 (6dc120d8)
008201b6 b9bcb49172 mov ecx,offset mscorlib_ni+0x40b4bc (7291b4bc)
008201bb e80f1f58fe call 007820d4
008201c0 8bc8 mov ecx,eax
008201c5 0fb68640010000 movzx eax,byte ptr [esi+140h]
008201c7 884104 mov byte ptr [ecx+4],al
008201ce e8aa811370 call System_ni+0x608380 (72108380)
008201d1 b9bcb49172 mov ecx,offset mscorlib_ni+0x40b4bc (7291b4bc)
008201d6 e8f41e58fe call 007820d4
008201db 8bc8 mov ecx,eax
008201e0 0fb68640010000 movzx eax,byte ptr [esi+140h]
008201e2 884104 mov byte ptr [ecx+4],al
008201e9 e88f811370 call System_ni+0x608380 (72108380)
008201ec 5e pop esi
008201f1 5d pop ebp
008201f2 c20400 ret 4
008201f3
역시나
지난번 글에서 봤던 것처럼 2개의 코드가 반복되는 것을 볼 수 있고 기계어 코드도 완전히 동일합니다.
그렇다면 일단 Visual Studio가 최적화해서 역어셈블하는 것은 아닌 듯합니다.
ollydbg는 어떨까요? 그래서 이번엔 ollydbg로 attach한 다음 "JITTED Code Address: 00820198"의 주소를 덤프해 보았습니다.
오호~~~ 역시나 동일합니다. 이것으로 테스트 끝~~~! ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]