2012-12-08 4 views
2

.NET C#으로 작성된 프로그램을 디버깅해야합니다.MSIL 용 또는 .NET에서 만든 exe ​​파일 용 디버거 C#

구체적으로 말해서 필요한 것은 함수 호출 후 함수가 무엇을 반환하는지 확인하는 것입니다. 이 목적을 위해 Microsoft Visual Studio를 사용할 수 있음을 발견했습니다. IL을 이해합니다. ILDASM을 사용하여 해당 exe 파일의 소스 코드를 얻습니다. 내가 pdb 파일을 얻고 ILASM을 사용하여 IL- 코드에서 exe-file을 얻는다. 하지만 원본 exe 파일은 ILASM 이후에 얻는 exe 파일과 다릅니다.

프로그램이 시작되지만 AccessViolation이 있습니다. __ 결과를보고 싶은 함수를 실행하려고합니다. 프로그램은 난독 화되지 않습니다.

내가 잘못했거나 성공적인 결과를 얻으려면 무엇을해야합니까?

답변

3

exe ​​-> il -> exe가 작동하지 않는 데에는 여러 가지 이유가 있습니다. 언급 한 것 외에도 (난독 화 된 일리노이) 네이티브 코드 또는 자체 서명을 직접 또는 간접적으로 검사하는 디지털 서명 된 실행 파일을 포함하는 실행 파일입니다.

응용 프로그램을 다시 빌드하지 않아도 IL을 통해 몇 명의 디버거가 단계를 밟을 수 있습니다. 개인적으로, 나는 이것을 위해 ILSpy을 사용하고 싶다. 최신 릴리스의 바이너리에는 디버깅에 필요한 비트가 포함되어 있지 않으므로 소스에서 빌드해야합니다.

GUI 대신 back in 2005을 추가 한 Mike Stall보고 MDbg가 있어야합니다. 나는 그것에 대한 경험이 없다.

0

hvd exe ​​-> IL -> exe를 할 때 잘못 될 수도있는 문제에 대해 설명했습니다. 그러나 비침 범적으로 함수의 반환 값을 확인하는 방법을 알려 드리겠습니다. 첫째로 당신은 당신의 프로젝트에 대한 기본 디버거를 사용하도록 설정해야합니다 :

의 C# 응용 프로그램 :

enter image description here

ASP.NET :

enter image description here

는 다음의 마지막 줄에 중단 점을 배치하여 방법, 열려있는 직접 실행 창 및 형식 (디버깅 세션 당 한 번 수행해야합니다) :

.load sos 

그런 다음 함수 (Shift + F11)를 나와서 eax (또는) 레지스트리 값 (Debug-> Windows-> Registers)을 복사하십시오. 함수의 반환 유형이 값 유형 (int, byte 등) 인 경우 값은 손가락 끝에 표시됩니다 (조사 식 창에 붙여 넣어 십진수 값으로 변환 할 수 있음). 기준값 인 경우 e (r) ax는 힙에있는 객체의 주소를 포함합니다. 보기 위해서는 그것을 다시 직접 실행 창에 입력을 얻을!

할 [복사 한 전자 (R) 도끼 값]

개체가 직접 실행 창에서 모든 속성과 필드가 표시됩니다. 문자열의 경우 Debug-> Windows-> Memory 창을 사용할 수도 있습니다.