Вызов функций чужого процесса
От: Flammable Россия  
Дата: 08.11.10 17:44
Оценка:
Всем привет! Конечно, это надо писать на C++, но уж так получилось, что нужно на .NET.
Имеется работающий процесс. Его код содержит функции, имена и адреса которых известны. Можно ли выполнить функцию в этом процессе?
Re: Вызов функций чужого процесса
От: Jolly Roger  
Дата: 08.11.10 19:07
Оценка:
Здравствуйте, Flammable, Вы писали:

F>Всем привет! Конечно, это надо писать на C++, но уж так получилось, что нужно на .NET.

F>Имеется работающий процесс. Его код содержит функции, имена и адреса которых известны. Можно ли выполнить функцию в этом процессе?

Сомневаюсь.

От имени функции толку мало, если эта функция не экспортируется, а вот адрес, надо полагать, можно превратить в делегат с помощью Marshal.GetDelegateForFunctionPointer. Разумеется, сначала надо этот делегат описать.

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

Я-бы не заморачивался и использовал подходящий язык, Си или дельфи, например.
"Нормальные герои всегда идут в обход!"
Re: Вызов функций чужого процесса
От: Аноним  
Дата: 08.11.10 19:25
Оценка:
Здравствуйте, Flammable, Вы писали:

F>Всем привет! Конечно, это надо писать на C++, но уж так получилось, что нужно на .NET.

F>Имеется работающий процесс. Его код содержит функции, имена и адреса которых известны. Можно ли выполнить функцию в этом процессе?
посмотрите здесь http://blogs.msdn.com/b/jmstall/archive/2006/09/28/managed-create-remote-thread.aspx
Re: Вызов функций чужого процесса
От: TK Лес кывт.рф
Дата: 09.11.10 10:12
Оценка: 6 (1)
Здравствуйте, Flammable, Вы писали:

F>Всем привет! Конечно, это надо писать на C++, но уж так получилось, что нужно на .NET.

F>Имеется работающий процесс. Его код содержит функции, имена и адреса которых известны. Можно ли выполнить функцию в этом процессе?

Если адреса известны то, как уже посоветовали CreateRemoteThread. Просто, передавайте ей уже известный адрес.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Вызов функций чужого процесса
От: Jolly Roger  
Дата: 10.11.10 04:59
Оценка:
Здравствуйте, TK, Вы писали:

TK>Если адреса известны то, как уже посоветовали CreateRemoteThread. Просто, передавайте ей уже известный адрес.


Вы не могли-бы чуть подробнее? Вы имеете в виду передать этот адрес в качестве потоковой функции? А как тогда быть с параметрами и с возможным несовпадением сигнатур? Или я Вас неправильно понял?
"Нормальные герои всегда идут в обход!"
Re[3]: Вызов функций чужого процесса
От: Jolly Roger  
Дата: 10.11.10 05:03
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

Ещё возникла мысль использовать прекомпилированную в нативный код NET-dll, но тут тоже, по-моему, будет непросто. Нужно будет обеспечить релок кода, что скорее всего придётся делать вручную.
"Нормальные герои всегда идут в обход!"
Re[2]: Вызов функций чужого процесса
От: Jolly Roger  
Дата: 10.11.10 05:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>посмотрите здесь http://blogs.msdn.com/b/jmstall/archive/2006/09/28/managed-create-remote-thread.aspx


Если я правильно понял, там делается следующее:

1)Процесс А получает IntPtr для своего-же делегата.
2)Запускает процесс Б, передав через параметры этот IntPtr.
3)Процесс Б вызывает CreateRemoteThread для процесса А, исользуя полученный от него IntPtr.

ИМХО, представлен самый неинтересный случай из всех возможных. Оба процесса — NET-приложения, оба процесса готовы выполнить соответствующие действия, наконец, это вообще не имеет смысла, так как процесс А с тем-же успехом может сам создать поток со своим делегатом, процесс Б вообще не нужен. То есть пример, по-моему, чисто академический, к реальной жизни никак не подходящий.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.