我目前正在研究如何编写可以注入另一个.NET进程并覆盖函数返回值的.NET代码。我的想法是我的代码会改变方法调用的返回值,如下所示:
Public Function DoSomething() As String
Return "Value"
End Function
我的代码将拦截对DoSomething()的调用并返回我自己的自定义字符串,而不是“Value”。
我猜我需要使用.NET Profiling API来做这类事情。有没有人有使用Profiling API的经验,如果有,你认为这段代码注入是否可行?
我不打算将它用于任何恶意的东西,我只是想在.NET中尝试一些非常低级的东西,看它是否可以完成。
干杯。 雅各
答案 0 :(得分:0)
您可以使用TypeMock Isolator执行此操作。
我没有TypeMock,但基于some of their examples,我认为你可以用这样的东西来做:(首先是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 ++。
答案 1 :(得分:0)
Detours是你如何为Win32做的。我从来没有见过Detours.NET,但他们正在做的事情会给你一个如何实现你想要做的事情的暗示。
答案 2 :(得分:0)
您可以调查消息接收器...... 这是一个高级区域,但基本上,它完全按照您要执行的操作,拦截从一个函数到另一个函数的调用,并在拦截期间执行您自己的代码...消息接收器可以链接在一起,并且可以写为发送消息接收器,在呼叫启动时进行处理,或者作为接收接收器,在另一端进行处理
答案 3 :(得分:0)
PostSharp可以做到这一点,但不是在运行时,它会在最初编写代码后修改代码。
答案 4 :(得分:0)
Typemock Isolator附带的CThru项目可以为您提供这种功能 该项目是一个开源项目,但它使用Typemock Isolator 它将允许您注册回调方法并在运行时更改其行为 它不仅限于运行单元测试 有一点需要注意的是,一旦你使用它,你将获得性能提升。