2009-04-09 5 views
0

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

Public Function DoSomething() As String 

Return "Value" 

End Function 

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

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

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

Cheers. Jas.

+0

Зачем вам когда-либо хотеть делать это в реальной ситуации? –

+0

Вы хотите сделать это во время выполнения или до запуска? –

+0

Это нужно сделать во время выполнения. Немного грустно, но я не собираюсь использовать это в реальном мире, мне просто кажется, что это вызов. Я использую TypeMock для модульного тестирования, и я подумал, что это может быть классный побочный проект, чтобы придумать способ изменения .NET-кода во время исполнения, введя мою собственную. – 2009-04-09 20:17:36

ответ

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 бесплатно для проектов с открытым исходным кодом, иначе это стоит денег. Но они уже сделали кодирование API профилирования для вас, поэтому вы можете беспокоиться о решении своей проблемы, а не о написании волосатого C++.

+0

Спасибо за ответ. Я действительно имею лицензию на TypeMock и использую ее для модульного тестирования, но мой проект является реальным .NET-приложением. Я бы хотел написать свое собственное приложение .NET, которое могло бы имитировать TypeMock и вставить мой собственный код в другую сборку и изменить его возвращаемые значения функции на лету. – 2009-04-09 20:22:36

0

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

0

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

Вот more detailed explanation

0

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

0

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

Смежные вопросы