방법은 없을 속이다.net JIT 컴파일러를 실행으로 또 다른 방법이 있나요?
-
04-07-2019 - |
문제
Ok,는 응용 프로그램은 발광 소자(86)지침으로 메모리를 만들고,페이지 실행,etc.방법은 없을 변경하는 방법 stub 의 un-JITted 방법을 지점을 나의 방출되는 명령 stream?
E.g.:
가정을 만들었는 86 명령 스트림에서 메모리가 뭔가 임의로 지정되었습니다.지금,추가로 가는 방법이 있'int 대상()'.I haven't 이라고 그것은 아직,그렇게되지 않은 컴파일합니다.하는 방법은 없:
- 을 얻을 포인터를 대상의 스텁
- 들에게 이점을 제출 지 stream.
내가 실현하는 실질적으로 모든 단 하나의 보안 기능.Net 계 지 납치 이와 같습니다.하지만 그것을 통해 가능,말 호스팅 API?
해결책
네, 할 수 있습니다!
mscorjit의 훅 getjit 방법. 그리고 당신은 모든 메모드가 jitting을 요구할 때마다 요청받을 것입니다. 원하는 것을 통과 할 수 있습니다. 일부 .NET Protectors는 이와 같이 작동합니다.
다른 팁
이것은 프로파일 링 API를 통해 가능합니다. 나는 그것을 사용한 적이 없지만 TypEmock에서 비슷한 목적으로 사용됩니다.
편집 : MSDN 블로그에 좋은 게시물이 있다고 생각합니다.
편집 2 : doh, 첫 번째 히트!
당신이 쉽지 않고 그것도 가능합니다.제가 기억하기로는 코드의 주소를 포함 JIT 컴파일러를 위한 방법,되지 않은 컴파일합니다.그래서려고 할 때 이 메소드를 호출,JIT 컴파일러 그 일을 할 것입니다 및 주소를 삽입하는 새로 컴파일한 방법입니다.는 경우 이를 변경할 수 있습니다 주소할 수 있습을 삽입하려면 전화를 자신의 코드입니다.이렇게 하는 방법을 발견되지 않은 것입니다.나는 확실히 희망 CLR 을 감지 이런 종류의 메모리가 부족합니다.
나는 생각하지 않 프로파일링 API 에 도움이 될 것입니다 이 경우(에 의해 제안 Leppie)으로,당신이하지 않을 수정하려고 하 MSIL.당신이 생각하는 경우 그렇지 않으면 이 문서 사용 될 수 있습니다 그것이 무엇인지 설명해야 합을 구현하기 위해 수행하는 것 TypeMock 이 하고 있습니다.
나는 메모리를 직접 시도하지 않을 것이며 프로파일 러 API를 사용할 수있는 대신 가능하지는 않습니다. 몇 가지 예제가 있지만 실제 문서는 없습니다. MSDN Magazine 기사를 살펴보십시오. .NET Framework 프로파일 링 API로 MSIL 코드를 즉시 다시 작성하십시오.