|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.03.2009, 15:03 | #1 |
Пользователь
Регистрация: 10.04.2008
Сообщений: 47
|
Вызвать адрес памяти как функцию
В общем меня интересует каким образом можно вызвать в стороннем приложении адрес памяти который являться функцией, так сказать удалённо выполнить функцию в стороннем приложении, и если это возможно, то как передать в неё ещё параметры ?
|
07.03.2009, 15:29 | #2 |
Пользователь
Регистрация: 10.04.2008
Сообщений: 47
|
млин, никто не в курсе 0_0?
|
07.03.2009, 15:37 | #3 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Ворватся в чужой процесс и выполнить его код ? Боже мой, что за уродство (извените за мои слова). А зачем собственно? Наверняка есть другое решение.
|
07.03.2009, 15:46 | #4 |
Пользователь
Регистрация: 10.04.2008
Сообщений: 47
|
Да, именно
Я думаю это решение оптимально если перед тобой запущенный процесс в котором нужно вызвать адрес памяти Если есть другие предложения - с удовольствием выслушаю |
07.03.2009, 16:33 | #5 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
В теории, нужно будет найти размер куска кода. Поидеии выделить память в своем процессе, скопировать в него через ReadProcessMemory нужный код другого процесса, допустим если это функция то до команды ret (как ее код, незнаю, можно посмотреть в инете или в хекс редакторе, составив прогу на асме простенькую). Потом установить привелегии для этого куска на выполнение, и объявить прототип функции (как я понял вам извесно какие там параметры и т.п.) тип этого прототипа объявить как переменную, и присвоить ей адресс той самой кучи которую мы выделилил. Ну и передать управление этой переменной (т.е. просто ее вызвать указав все параметры, если есть таковые). Она выполнится и по комманде ret вернет управление на следующую команда идующую после вызова этой переменной :0
Думаю такое прокатит. |
07.03.2009, 16:39 | #6 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
Я как раз хотел это спросить!
Думаю, что как описано выше, ничего не получится. Поэтому я немного изменю вопрос. (Прошу не писать в ответ, что это извращённый способ и не предлагайте обходные пути. Просто ответить Да, или Нет?) Допустим есть 2 программы, написанные мной. И обе подстроены под эту туёвину. Как мне из первой программы использовать функцию во второй программе? У меня такая мысль: Надо юзать что-то типа tCopyDataStruct и передать в структуре из программы 2 в программу 1 нужную функцию. Ну а в программе 1 что-то вроде: Код:
|
07.03.2009, 16:41 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
эмм... Вы не много видимо не в курсе, что программы располагаются в "собственных" адрессных пространствах ? Ответ - Нет.
А все таки мой вариант, мне кажется более менее правдоподобным. |
07.03.2009, 16:51 | #8 |
Пользователь
Регистрация: 10.04.2008
Сообщений: 47
|
BOBAH13, возможно я чего-то не понял, но мне кажется твоим способом я не выполню функцию в удалённом процессе а просто скопирую её в спою прогу и выполню там, мне кажется это немного не тем что я имел в виду, мне нужно что-то типо asm'овского call но на дельфе ТК в асме не тук тук)
|
07.03.2009, 17:15 | #9 |
Пользователь
Регистрация: 10.04.2008
Сообщений: 47
|
ап..., судя по всему тут не видят тех тем которые не лежат на главной
|
07.03.2009, 17:19 | #10 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Эм... я может конечно не понимаю, но разве реально передать управление из своего процесса другому ? Концепция защещенного режима заключается в том, я повторяюсь, что каждый процесс работает в своем адресном пространестве и никак не взаимодействует с другими. Соотвественно вы не сможете выполнить код. Может если бы раскрыли цель точнее мы бы нашли вариант решения. А ассемблер и так в дельфи есть. asm call .... end; В чем тогда проблема ? Просто мне интересно как же вы адресс будите указывать при вызове call ? :D т.к. какой бы вы не указали всеравно он будет интерпритироватся как адресс пространства вашего процесса и никакого иного.
Но видимо, вы не сильно и хотите вникать в то что я предлагал. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вызвать 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 |