Как внедрить .NET код для изменения возвращаемых значений функций - PullRequest
0 голосов
/ 10 апреля 2009

В настоящее время я изучаю, как написать код .NET, который можно внедрить в другой процесс .NET и переопределить возвращаемые значения функции. Идея состоит в том, что мой код изменил бы возвращаемые значения вызова метода, как это:

Public Function DoSomething() As String

Return "Value"

End Function

Мой код будет перехватывать вызовы DoSomething () и возвращать мою собственную пользовательскую строку, а не «Значение».

Я предполагаю, что мне нужно было бы посмотреть на использование .NET Profiling API, чтобы делать подобные вещи. У кого-нибудь есть опыт использования Profiling API, и если да, то думаете ли вы, что такое внедрение кода возможно?

Я не собираюсь использовать это для чего-либо вредоносного, я просто заинтересован в том, чтобы попробовать что-то очень низкоуровневое в .NET, чтобы посмотреть, можно ли это сделать.

Приветствия. Иак.

Ответы [ 5 ]

0 голосов
/ 09 августа 2010

Проект CThru , который поставляется с Typemock Isolator, может предоставить вам эту функциональность Проект с открытым исходным кодом, но использует Typemock Isolator.
Это позволит вам зарегистрировать свой метод обратного вызова и изменить его поведение во время выполнения.
Он не ограничивается работой с юнит-тестами.
Стоит отметить, что вы получите удар по производительности, как только будете его использовать.

0 голосов
/ 10 апреля 2009

PostSharp может сделать это, но не во время выполнения, он изменяет код после того, как он был изначально написан.

0 голосов
/ 10 апреля 2009

Объезд - это то, как вы делаете это для Win32. Я никогда не видел Detours.NET, но, возможно, что-то, что они делают, подскажет вам, как реализовать то, что вы пытаетесь сделать.

0 голосов
/ 10 апреля 2009

Вы можете исследовать приемники сообщений ... Это сложная область, но в основном она делает именно то, что вы пытаетесь сделать, перехватывает вызов одной функции другой и во время перехвата выполняет собственный код ... Приемники сообщений могут быть связаны вместе, и могут быть записаны как приемники отправляемых сообщений, обрабатываться при инициализации вызова или, альтернативно, как приемные приемники, обрабатываться на другом конце

Вот более подробное объяснение

0 голосов
/ 10 апреля 2009

Вы можете сделать это, используя 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 ++.

...