2012-02-19 4 views
0

나는 예외를 처리하는 방법을 알고 [00000001]디버거와 대화하거나 예외 메시지를 변경하는 방법은 무엇입니까?

에 기록 할 때 예외가 슬로우 메시지 = 액세스 위반을 디버거 로그 파일을 발생하면 실제로

push handler 
push fs:[0] 
..... 

할 어떤 종류의 잡기 .. 시도 를 사용하여

어떻게

그래서 내가 어떻게 디버거 대화를 나눌 수 ++ asm32 또는 Visual C를 사용하여 "기능 계산 시작"와 같은 디버거에 다른 메시지를 던질 수 있습니까?

+0

어떤 시스템에서 어떤 컴파일러를 사용합니까? 디버깅은 두 가지 모두에 대해 상당히 특정한 경향이 있습니다. –

+2

코드에서 OutputDebugString()을 사용하십시오. 이것은 일반적으로 불필요한 것으로 스택 추적을 볼 수 있습니다. –

+0

Windows에서 컴파일러는 WinAsm MASM32 또는 Visual C++가됩니다 – Ben

답변

2

WinAPI의 OutputDebugString 이후에 olly가 로그하므로 (다른 디버거가 전역 디버그 뮤텍스를보고 있으므로) sysinternals dbgview도 마찬가지입니다.

+0

패치되지 않은 Ollydbg가 OutputDebugString (pString)에 이것을 보내고 나는 ollydbg 로그 파일 예외에 들어갑니다 : 40010006 – Ben

+0

OutputDebugString ("test")을 사용했고 디버거 로그에 예외가 표시되었습니다 : 40010006 텍스트 자체가 아닙니다 ... 그러나 windbg는 정상적으로 작동합니다. 왜 그런가요? – Ben

+0

@ 벤 : 당신이 뭔가 잘못하고있다, 그것은 나를 위해 여기에서 잘 작동한다. 문자 세트 (케이스 'OutputDebugStringA')에 올바른 버전을 사용하고 있는지 확인하십시오. – Necrolis

0

x86에서 적어도 오래된 트릭은 "int 3"을 발행하는 것이 었습니다. 이것이 여전히 주류 운영 체제에서 작동하는지 확신 할 수 없습니다.

+0

이것은 Windows에서 실행되도록 작성된 x86 및 x64 어셈블리 코드에서 여전히 작동합니다. 그러나 C/C++에서는 __debugbreak()와 같은 컴파일러 내장 함수 나 Windows API의 유사한 래핑 함수를 사용하는 것이 좋습니다. – reuben

+0

응용 프로그램을 일시 중지 할 필요가 없습니다. 특정 기능을 입력하면 ollydbg 로그에 메시지를 보내야합니다. – Ben

+0

방금 ​​프로세스를 중지했거나 디버거가없는 상태에서 오류가 발생했습니다. 어떻게 메시지를 보내시겠습니까? – pezcode