는 방법을 가로채는 무료 함수 호출을 다음과 같 hippomocks 니까?

StackOverflow https://stackoverflow.com//questions/25079768

  •  02-01-2020
  •  | 
  •  

문제

내가 무엇인지 궁금 hippomocks 않을 차단하기 위해 exit 호출 기능에 대한 예와 같이에서 아래 코드:

   MockRepository mocks;
   mocks.ExpectCallFunc(exit).With(2).Throw(std::exception());
도움이 되었습니까?

해결책

는 코드가 가로채기에 hippomocks.h.수정하는 메모리 보호를 플래그를 쓸 수 있는 주소를 제공하는 함수 포인터,다음 쓰는 이동 명령어에 처음 바이트의 기능입니다.때 갈고리가 더 이상 필요하지 않습니다,원래의 바이트는 복원됩니다.이것은 동일한 방식을 사용하여,예를 들어,이 Microsoft 회 라이브러리입니다.

다른 팁

그것은 던지는 함수에서 전달(이 경우에는 간단한 함수 포인터)char*,요청 OS 품을 쓸 수 있다(사용 mprotect 에 Unices 및 VirtualProtect Windows)을 수정하는 첫 번째 5 14 바이트는 무조건 이동 명령.그것의 주소 생성(사용하여 템플릿을 사용하여)함수와 동일한 서명이 장소에서,효과적으로 재정의하는 기능입니다.

당신이 원하는 경우에 당신은 다시 사용할 수 있습 HippoMocks'코드를 직접 구성하여 객체의 클래스를 대체 스택에서 오른쪽으로 인수입니다.할 수도 있습니 복사본 코드(에서 최신 hippomocks.h on GitHub 모두 32/64bit x86,팔과 엄지 손가락은 지원).그것은 주 라인에 200 므로,상대적으로 높다.해야 합니다 또한 복사 horrible_cast 클래스고의 보호를 해제 클래스첫 번째 수 있습 던지기 구성원이 함수 포인터를 다른 형식(가능하지 않은과 reinterpret_cast)그리고 두 번째 랩 OS 특정의 보호를 해제(고 다시 보호)호출합니다.

에서 청소하는 코드는 C++11 나는 또한 추출을 정확하게 이 하위 집합이,그래서 당신은 지금 사용할 수 있습니다 세부사항/교체합니다.h 파일을 얻을하는 코드가이다.에 대한 직접적인 링크를 보면, https://github.com/dascandy/hippomocks/blob/cpp11/HippoMocks/detail/replace.h .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top