CLR 프로파일 링 API와 함께 IL을 다시 작성하려면 내 자신의 관리되지 않은 IL 라이브러리를 작성해야합니까?

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

문제

나는 CLR 프로파일 링 API의 기사 중 일부를보고 있었고, 그 많은 기사는 실제 재 작성을하기 위해 setilFunctionBody ()에게 전화하는 것에 대해 이야기합니다. 그러나 해당 기사 중 어느 것도 실제로 실제 방법 IL 바이트를 다시 작성하는 데 사용할 수있는 내용을 정확하게 설명하지 않습니다. 내가 IL을 쓸 수있게 해줄 수없는 도서관이 있습니까, 아니면 직접 써야합니까?

도움이 되었습니까?

해결책

아마. 때에 따라 다르지.

모노 프로젝트에는 Cecil이라는 도서관이 있으며 여기에서 액세스 할 수 있습니다.

http://mono-project.com/cecil

그러나 프로파일 링 중에 전화 할 수없는 관리 코드입니다. 그래도 몇 가지 옵션이있을 수 있습니다.

  1. IPC를 사용하십시오. 해당 프로세스에서 Cecil을 사용하여 다시 작성 한 다음 이름 지정된 파이프를 사용하여 바이트를 프로파일 러에게 전달할 수 있습니다.
  2. 포트 세실에서 C ++. 코드는 MIT / X11 라이센스에 따라 배포되었으므로 변경 사항을 공유하지 않고도 수행 할 수 있습니다.
  3. 처음부터 나만의 물건을 쓰십시오.

#1은 추가 복잡성을 소개합니다. 프로파일 러는 실제로 필요한 것보다 더 움직이는 부분을 갖게됩니다. 또한 IPC는 여분의 오버 헤드를 소개합니다.

#2는 시간이 오래 걸릴 것입니다. Cecil이 여전히 버전 0.6에 불과하다는 점을 감안할 때, 자신의 구현을 작성하는 것보다 시간이 가치가 없을 수도 있습니다.

#3은 당신에게 가장 큰 통제권을 줄 것이며 아마도 가장 성능이있을 것입니다. 그러나 #1보다 실질적으로 더 많은 노력이 필요합니다.

다른 팁

나는 OpenCover를 위해 간단한 것을 썼습니다 https://github.com/sawilde/opencover 그 문제에 대한 당신이나 다른 사람이 유용하다고 생각할 수 있습니다.

이 기사는 당신이 찾고있는 것을 가질 수 있습니다http://www.codeproject.com/kb/cs/il_rewriting.aspx

실제 바이트는 어딘가에서 나와야하며 프로파일 링 API를 사용하는 경우 직접 제공해야합니다. 이 기사는 그것을하는 방법에 대해 심도있게됩니다 (아마도 당신이 읽은 것 중 하나). http://msdn.microsoft.com/en-us/magazine/cc188743.aspx

보다 '일반적인'기술은 실제로 원하는 언어로 필요한 코드를 실제로 작성한 다음 IL에 컴파일하는 것입니다. 그런 다음 디자인 시간에 Opcodes를 추출하여 도달 할 수있는 곳에 저장하거나 런타임에서 컴파일 된 IL에서 추출하여 필요한 곳에 넣을 수 있습니다.

Afaik이를 도와 줄 수없는 도서관은 없습니다.

나는 당신이 시간이 걸리는 것이 무엇인지보고 싶어서 더 빨리 갈 수 있도록 (다양한 타이밍 정보를 얻는 것과는 달리) 이것을하고 싶다고 생각합니다. IMHO, 프로파일 링 API가 필요하지 않습니다. IDE에서 앱을 실행하고 무작위로 일시 중지 할 수 있다면. 이유는 다음과 같습니다.

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