성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - 프로퍼티로 정의하면 필드보다 느릴까요? - windbg / ollydbg</h1> <p> 오~~~ <a target='tab' href='https://www.sysnet.pe.kr/2/0/1545#4001'>재미있는 의견</a>이 올라왔습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > " Visual Studio의 Disassembly는 어셈블리 코드를 최적화해서 보여주더라구요. " </pre> <br /> 얼핏 생각하기에는 Visual Studio가 그럴 수 있을까??? 라는 생각이 듭니다. 사실, 역어셈블러를 만드는 것이 바이트에 따라 Intel 명령어 셋을 그대로 해석해야만 맞아들어가기 때문에 중간에 어떤 변조를 하게 되면 뒤이어 줄줄이 깨지기 때문입니다.<br /> <br /> 그래도 확인을 해봐야 합니다. ^^ 그래서, 이번에는 windbg로 해 보았습니다.<br /> <br /> 역시 <a target='tab' href='http://www.sysnet.pe.kr/2/0/1545'>지난번 예제</a>를 x86/Release 빌드로 해서 실행한 후 windbg로 attach 시켰습니다.<br /> <br /> sos를 로드하고,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:007> <span style='color: blue; font-weight: bold'>.loadby sos clr</span> </pre> <br /> Form1_Load 메서드의 JIT 컴파일된 함수의 주소를 알아내서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:007> <span style='color: blue; font-weight: bold'>!name2ee *!WindowsFormsApplication1.Form1.Form1_Load</span> Module: 72511000 Assembly: mscorlib.dll -------------------------------------- Module: 00562ed4 Assembly: WindowsFormsApplication1.exe Token: 06000006 MethodDesc: 005663a8 Name: WindowsFormsApplication1.Form1.Form1_Load(System.Object, System.EventArgs) <span style='color: blue; font-weight: bold'>JITTED Code Address: 00820198</span> -------------------------------------- Module: 6dac1000 Assembly: System.Windows.Forms.dll -------------------------------------- Module: 6ff91000 Assembly: System.Drawing.dll -------------------------------------- Module: 71b01000 Assembly: System.dll </pre> <br /> 그 주소를 역어셈블해 보았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 0:007> <span style='color: blue; font-weight: bold'>u 00820198</span> 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) <span style='color: blue; font-weight: bold'>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) </span> 008201ec 5e pop esi 008201f1 5d pop ebp 008201f2 c20400 ret 4 008201f3 </pre> <br /> 역시나 <a target='tab' href='http://www.sysnet.pe.kr/2/0/1545'>지난번 글에서 봤던 것처럼 2개의 코드가 반복</a>되는 것을 볼 수 있고 기계어 코드도 완전히 동일합니다.<br /> <br /> 그렇다면 일단 Visual Studio가 최적화해서 역어셈블하는 것은 아닌 듯합니다.<br /> <br /> ollydbg는 어떨까요? 그래서 이번엔 ollydbg로 attach한 다음 "JITTED Code Address: 00820198"의 주소를 덤프해 보았습니다.<br /> <br /> <img alt='windbg_prop_field_1.png' src='/SysWebRes/bbs/windbg_prop_field_1.png' /> <br /><br /> 오호~~~ 역시나 동일합니다. 이것으로 테스트 끝~~~! ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
2504
(왼쪽의 숫자를 입력해야 합니다.)