我一直在查看有关 CLR Profiling API 的一些文章,其中许多文章都讨论了调用 SetILFunctionBody() 来执行实际的 IL 重写;但是,这些文章都没有真正准确地解释可以使用什么来重写实际方法 IL 字节。是否有一个非托管库允许我编写 IL,或者我必须自己编写一个库?

有帮助吗?

解决方案

大概。这取决于。

Mono 项目有一个名为 Cecil 的库,您可以在此处访问:

http://mono-project.com/Cecil

然而,它是托管代码,您在分析时无法调用它。不过,您可能有几个选择:

  1. 使用工控机。您可以生成一个新进程,在该进程中使用 cecil 进行重写,然后使用命名管道将字节传递回分析器。
  2. 将 CECIL 移植到 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。然后,您可以提取在设计时的操作码,并将其储存在那里你可以联系他们或者在运行时和东西从你编译IL提取他们在你需要它。

据我所知,没有非托管库,以帮助您与此。

我想,你希望这样做,因为你想看到什么需要时间,这样你可以把它走得更快(而不是刚开各种时序信息)。 恕我直言,你不需要分析API,如果你可以在IDE中运行你的应用程序,并随机暂停。 这里的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top