2011-07-06 6 views
4

나는 VM웨어를 감지 또는 가상 PC
http://www.codeproject.com/KB/system/VmDetect.aspx
에 대해이 문서를 통해 와서 나는 그들이 문 노력을 제외한 어떤 종류를 사용하는 것을 보았다.
는 그래서 MSDN에서 그것을 보았다 : http://msdn.microsoft.com/en-us/library/s58ftw19%28v=vs.80%29.aspxC는 예외 처리 ++ 문

내가 시도-제외하고 대신 좋은 오래된 시도 - 캐치를 사용하는 이유를 이해하지 않습니다. 예외에 대한 추가 정보를 제공하나요?
그렇다면 첨부 된 기사의 코드를 사용할 때 try-catch를 사용할 수 있습니까?
감사합니다 :)

+1

[Visual C++ 예외 FAQ] (http://members.cox.net/doug_web/eh.htm)가 도움이 될 수 있습니다. 특히 Q3. – Darcara

답변

6

__try/__except예외 다른 종류 들면 try/catch이다. 부동 소수점 위반, 잘못된 포인터 참조 해제 등의 하드웨어 예외를 catch 할 수 있으며 C++ 예외는 사용할 수 없습니다. 이것은 Structured Exception Handling (SEH)이라 불리우며 어디서 볼 수 있는지 안다면 MSDN에 꽤 있습니다.

이 경우 잘못된 명령어를 감지하는 데 사용됩니다. x86에서 지원하지 않는 명령을 실행하려고 시도하는 곳이며 가상 컴퓨터가이를 사용합니다. 실제 CPU에서 실행중인 경우 잘못된 명령어 예외가 발생하고 가상 시스템에서 실행중인 경우 방금 대화했습니다. 이 정보에 대한 링크를 참조 소프트웨어들에 동일하게 하드웨어 예외를 처리로

+0

좋아, "try-except 대신 try-catch를 사용할 수 있습니까?"라는 대답은 NO입니까? :) – Idov

+0

@ 이도 브 : 가장 확실합니다. 그것들은 근본적으로 다른 시스템입니다. – Puppy

2

MSDN이 모든에 대해 일반적으로 불분명하지만, __try/__except에 의해 처리 예외는 C++ 예외가 아니지만, 시스템 예외. Segmentation Fault와 같은 것.

1

Microsoft는 실제 C++ 표준에서 예외를 포함하기 전에 Microsoft C++ 용 구조적 예외 처리를 만들었습니다. 따라서 Windows에서 존재하는 모든 예외는 SEH 예외이지만 C++ 예외는 아닙니다.

__try/__except는 SEH 예외 (및 우연히도 C++ 예외)를 잡는 방법입니다. try/catch는 C++ 예외 만 잡는 방법입니다. 또한 한 기능에서 두 가지 기능을 모두 사용할 수 없다는 한계가 있음을 상기 할 수 있습니다. 그러나이 문제를 해결하는 것은 쉽습니다.

사용하려면 예외가 있으면 try/catch를 사용하기 만하면됩니다. 만약 누군가가 명시 적으로 당신에게 SEH 예외 (0으로 나눕니다, null 포인터 역 참조 등)를 던져 버리면 그것을 잡아서 규칙적인 프로그램 흐름으로 바꾸거나 소프트웨어를 중단시키는 등의 일반적인 프로그램 흐름으로 변환하십시오.

1

__try, __except__finally 조항이 Structured Exception Handling위한, 이것은 Windows에서 발생한 예외에 대한 예외 처리 메커니즘이다. 그들은 C++ 예외와 동일하지 않습니다.