문제

Ok,는 응용 프로그램은 발광 소자(86)지침으로 메모리를 만들고,페이지 실행,etc.방법은 없을 변경하는 방법 stub 의 un-JITted 방법을 지점을 나의 방출되는 명령 stream?

E.g.:

가정을 만들었는 86 명령 스트림에서 메모리가 뭔가 임의로 지정되었습니다.지금,추가로 가는 방법이 있'int 대상()'.I haven't 이라고 그것은 아직,그렇게되지 않은 컴파일합니다.하는 방법은 없:

  1. 을 얻을 포인터를 대상의 스텁
  2. 들에게 이점을 제출 지 stream.

내가 실현하는 실질적으로 모든 단 하나의 보안 기능.Net 계 납치 이와 같습니다.하지만 그것을 통해 가능,말 호스팅 API?

도움이 되었습니까?

해결책

네, 할 수 있습니다!

mscorjit의 훅 getjit 방법. 그리고 당신은 모든 메모드가 jitting을 요구할 때마다 요청받을 것입니다. 원하는 것을 통과 할 수 있습니다. 일부 .NET Protectors는 이와 같이 작동합니다.

다른 팁

이것은 프로파일 링 API를 통해 가능합니다. 나는 그것을 사용한 적이 없지만 TypEmock에서 비슷한 목적으로 사용됩니다.

편집 : MSDN 블로그에 좋은 게시물이 있다고 생각합니다.

편집 2 : doh, 첫 번째 히트!

당신이 쉽지 않고 그것도 가능합니다.제가 기억하기로는 코드의 주소를 포함 JIT 컴파일러를 위한 방법,되지 않은 컴파일합니다.그래서려고 할 때 이 메소드를 호출,JIT 컴파일러 그 일을 할 것입니다 및 주소를 삽입하는 새로 컴파일한 방법입니다.는 경우 이를 변경할 수 있습니다 주소할 수 있습을 삽입하려면 전화를 자신의 코드입니다.이렇게 하는 방법을 발견되지 않은 것입니다.나는 확실히 희망 CLR 을 감지 이런 종류의 메모리가 부족합니다.

나는 생각하지 않 프로파일링 API 에 도움이 될 것입니다 이 경우(에 의해 제안 Leppie)으로,당신이하지 않을 수정하려고 하 MSIL.당신이 생각하는 경우 그렇지 않으면 이 문서 사용 될 수 있습니다 그것이 무엇인지 설명해야 합을 구현하기 위해 수행하는 것 TypeMock 이 하고 있습니다.

ICORPROFILER를 사용하고 JIT를 사용하기 전에 방법을 다시 작성할 수있을뿐만 아니라 사용할 수 있습니다. Icordebug (MDBG는 인터페이스를 관리했습니다). 브레이크 포인트가 히트가 차단 코드에 다음 문을 설정하면 중단 점을 설정하십시오. 이 모든 프로세스는 코드에서 수행 될 수 있지만 실제로는 방해가되며이를 조정하려면 "감시자"프로세스가 필요합니다.

볼만한 또 다른 것은 다음과 같습니다 포스트 쇼트 속성을 적용하는 경우 입력 및 종료 방법을 제공하는 프로젝트.

나는 메모리를 직접 시도하지 않을 것이며 프로파일 러 API를 사용할 수있는 대신 가능하지는 않습니다. 몇 가지 예제가 있지만 실제 문서는 없습니다. MSDN Magazine 기사를 살펴보십시오. .NET Framework 프로파일 링 API로 MSIL 코드를 즉시 다시 작성하십시오.

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