0

我目前正在研究如何编写可以注入另一个 .NET 进程并覆盖函数返回值的 .NET 代码。这个想法是我的代码会改变方法调用的返回值,如下所示:

Public Function DoSomething() As String

Return "Value"

End Function

我的代码会拦截对 DoSomething() 的调用并返回我自己的自定义字符串,而不是“值”。

我猜我需要使用 .NET Profiling API 来做这种事情。有没有人有使用 Profiling API 的经验,如果有,你认为这种代码注入是可能的吗?

我不打算将它用于任何恶意,我只是想在 .NET 中尝试一些非常低级别的东西,看看它是否可以完成。

干杯。贾斯。

4

5 回答 5

0

您可能会调查消息接收器...这是一个高级领域,但基本上,它完全按照您的要求做,拦截从一个函数到另一个函数的调用,并在拦截期间执行您自己的代码......消息接收器可以链接在一起,并且可以写为发送消息接收器,在调用启动时处理,或者作为接收接收器,在另一端处理

这里有更详细的解释

于 2009-04-09T20:57:14.440 回答
0

您可以使用TypeMock Isolator来做到这一点。

我没有 TypeMock,但是根据他们的一些例子,我认为你可以用这样的东西来做:(首先是 C#,然后我会尝试翻译成 VB)

using (RecordExpectations recorder = RecorderManager.StartRecording())
{
    DoSomething();
    recorder.Return("My Own Custom String");
}

Using recorder As RecordExpectations = RecorderManager.StartRecording()
    DoSomething
    recorder.Return("My Own Custom String")
End Using

看起来 TypeMock 对开源项目是免费的,否则它会花钱。但是他们已经为您完成了 Profiling API 编码,因此您可以担心解决问题,而不是编写繁琐的 C++。

于 2009-04-09T20:19:37.120 回答
0

Detours是你为 Win32 做的。我从未见过 Detours.NET,但也许他们正在做的事情会给你一个关于如何实现你想要做的事情的提示。

于 2009-04-09T20:24:41.193 回答
0

PostSharp 可以做到这一点,但不是在运行时,它会在最初编写后修改代码。

于 2009-04-09T21:13:10.860 回答
0

Typemock Isolator 附带的CTru项目可以为您提供此功能。
该项目是一个开源项目,但它使用 Typemock Isolator。
它会让你注册你的回调方法并在运行时改变它的行为。
它不仅限于运行单元测试。
需要注意的一件事是,一旦使用它,性能就会受到影响。

于 2010-08-09T08:45:06.810 回答