Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2009, 15:03   #1
XAOC-forever
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 47
Восклицание Вызвать адрес памяти как функцию

В общем меня интересует каким образом можно вызвать в стороннем приложении адрес памяти который являться функцией, так сказать удалённо выполнить функцию в стороннем приложении, и если это возможно, то как передать в неё ещё параметры ?
XAOC-forever вне форума Ответить с цитированием
Старый 07.03.2009, 15:29   #2
XAOC-forever
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 47
По умолчанию

млин, никто не в курсе 0_0?
XAOC-forever вне форума Ответить с цитированием
Старый 07.03.2009, 15:37   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ворватся в чужой процесс и выполнить его код ? Боже мой, что за уродство (извените за мои слова). А зачем собственно? Наверняка есть другое решение.
BOBAH13 вне форума Ответить с цитированием
Старый 07.03.2009, 15:46   #4
XAOC-forever
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 47
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Ворватся в чужой процесс и выполнить его код ?
Да, именно
Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Боже мой, что за уродство (извените за мои слова).
Я думаю это решение оптимально если перед тобой запущенный процесс в котором нужно вызвать адрес памяти
Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А зачем собственно? Наверняка есть другое решение.
Если есть другие предложения - с удовольствием выслушаю
XAOC-forever вне форума Ответить с цитированием
Старый 07.03.2009, 16:33   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

В теории, нужно будет найти размер куска кода. Поидеии выделить память в своем процессе, скопировать в него через ReadProcessMemory нужный код другого процесса, допустим если это функция то до команды ret (как ее код, незнаю, можно посмотреть в инете или в хекс редакторе, составив прогу на асме простенькую). Потом установить привелегии для этого куска на выполнение, и объявить прототип функции (как я понял вам извесно какие там параметры и т.п.) тип этого прототипа объявить как переменную, и присвоить ей адресс той самой кучи которую мы выделилил. Ну и передать управление этой переменной (т.е. просто ее вызвать указав все параметры, если есть таковые). Она выполнится и по комманде ret вернет управление на следующую команда идующую после вызова этой переменной :0

Думаю такое прокатит.
BOBAH13 вне форума Ответить с цитированием
Старый 07.03.2009, 16:39   #6
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Я как раз хотел это спросить!
Думаю, что как описано выше, ничего не получится. Поэтому я немного изменю вопрос.

(Прошу не писать в ответ, что это извращённый способ и не предлагайте обходные пути. Просто ответить Да, или Нет?)

Допустим есть 2 программы, написанные мной. И обе подстроены под эту туёвину. Как мне из первой программы использовать функцию во второй программе?
У меня такая мысль: Надо юзать что-то типа tCopyDataStruct и передать в структуре из программы 2 в программу 1 нужную функцию.
Ну а в программе 1 что-то вроде:
Код:
type 
   testFunc = function(const value: integer): integer;
...

procedure TaMain_form.cpd(var m: TWMCopyData);
var
p: ^testFunc ;
begin
   p := m.CopyDataStruct.lpData;
   testFunc (p^)(10);
end;
Altera вне форума Ответить с цитированием
Старый 07.03.2009, 16:41   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

эмм... Вы не много видимо не в курсе, что программы располагаются в "собственных" адрессных пространствах ? Ответ - Нет.
А все таки мой вариант, мне кажется более менее правдоподобным.
BOBAH13 вне форума Ответить с цитированием
Старый 07.03.2009, 16:51   #8
XAOC-forever
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 47
По умолчанию

BOBAH13, возможно я чего-то не понял, но мне кажется твоим способом я не выполню функцию в удалённом процессе а просто скопирую её в спою прогу и выполню там, мне кажется это немного не тем что я имел в виду, мне нужно что-то типо asm'овского call но на дельфе ТК в асме не тук тук)
XAOC-forever вне форума Ответить с цитированием
Старый 07.03.2009, 17:15   #9
XAOC-forever
Пользователь
 
Регистрация: 10.04.2008
Сообщений: 47
По умолчанию

ап..., судя по всему тут не видят тех тем которые не лежат на главной
XAOC-forever вне форума Ответить с цитированием
Старый 07.03.2009, 17:19   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Эм... я может конечно не понимаю, но разве реально передать управление из своего процесса другому ? Концепция защещенного режима заключается в том, я повторяюсь, что каждый процесс работает в своем адресном пространестве и никак не взаимодействует с другими. Соотвественно вы не сможете выполнить код. Может если бы раскрыли цель точнее мы бы нашли вариант решения. А ассемблер и так в дельфи есть. asm call .... end; В чем тогда проблема ? Просто мне интересно как же вы адресс будите указывать при вызове call ? :D т.к. какой бы вы не указали всеравно он будет интерпритироватся как адресс пространства вашего процесса и никакого иного.
Но видимо, вы не сильно и хотите вникать в то что я предлагал.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать Message с Edit'ом? Port 111 Общие вопросы Delphi 7 02.02.2009 02:18
как узнать ip адрес зная mac адрес Roman Работа с сетью в Delphi 9 25.06.2007 12:39
Как вызвать процедуру ??? Marat Помощь студентам 8 02.03.2007 15:11
как вызвать в Dll по указателю функцию, которая определена в главном потоке? SaintRain Общие вопросы Delphi 1 25.11.2006 08:27
как вызвать из Dll функцию, которая определена в главном потоке? SaintRain Win Api 1 23.11.2006 20:08