|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.12.2010, 19:40 | #1 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
Использование функции чужого приложения/OpenGL
Доброго времени суток всем уважаемым экспертам.
Собственно суть вопроса, есть некое скомпилированное *.exe приложение mmorpg игра которая содержит в себе библиотеку OpenGL и есть собственная *.dll динамически подгруженная в адресное пространство процесса (то есть в игру). Собственно мне нужно как-то с взаимодействовать мою функцию с функцией glEnabled() игры. Для этого я нашел адрес glEnabled() в *.exe приложение по определенному адресу и попытался сделать такой вариант с макросом define MyGLEnabled ((void(*) (Type Func)) 0x00416D0D), но ничего не вышло. # // 0x00416D0D - адрес функции glEnabled() Код:
Код:
Последний раз редактировалось coNsept; 29.12.2010 в 19:48. |
29.12.2010, 19:49 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Такая штука называется "перехват api". В сети достаточно информации и примеров как перехватывать функции.
|
29.12.2010, 21:44 | #3 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
Да вроде както перехваты можно делать, я правдо незнаю как делать.
А тебе нужно походу ассемблер юзать - делаешь асм вставку, пишешь в стек параметры функции (чтоб узнать порядок надо узнать соглашение о вызове) и вызываешь call на нужный адрес, и далее если в соглашении требуется чистить стек то чистишь его.. ЗЫ: по поводу адреса - он не всегда будет таким, так как это на самом деле адрес базы экзешника в памяти + реальный адрес функции, в xp и 7ке помоему эти адреса разные, то есть тебе надо адрес базы узнать сначало а потом к нему прибавлять адрес функции относительный Последний раз редактировалось UltimaBeaR; 29.12.2010 в 22:12. |
30.12.2010, 20:48 | #4 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
Спасибо большое всем, мне нужны были перехваты как и сказал ВОВАН13.
|
31.12.2010, 08:20 | #5 |
Форумчанин
Регистрация: 14.12.2009
Сообщений: 716
|
Ребят, помогите, что-то у меня не совсем получается перехватить функцию. Вообщем программа даже перестает запускаться
Код:
|
31.12.2010, 15:31 | #6 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
Чето ты мудришь очень с этими дефайнами, сам в них не путаешся?
У тебя идет вызов твоего указателя с параметрами void а ты в нег опри вызове передаешь что-то, конечно не будет компилится как минимум по этому вот оформляй в таком плане: Код:
Код:
Последний раз редактировалось UltimaBeaR; 31.12.2010 в 15:36. |
31.12.2010, 16:07 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Вы вообще читали хоть одну статью по перехвату API? Там адрес никогда не получается статическим. Получение адреса выходит благодаря GetProcAddress, где указывается имя экспортируемой функции и модуль (.dll, .exe) в котором она находится, но этот модуль должен быть загружен в тот же процесс в котором находится ваша dll. Читайте внимательно, ведь даже примеры есть.
|
31.12.2010, 16:15 | #8 |
Форумчанин
Регистрация: 21.12.2010
Сообщений: 199
|
А если эти функции не экспортируются?
ЗЫ Хотя тут вроде длл Последний раз редактировалось UltimaBeaR; 31.12.2010 в 16:28. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Данные с чужого приложения | Revenger | Общие вопросы Delphi | 3 | 12.08.2010 23:07 |
Hint чужого приложения | Umberto | Win Api | 0 | 07.02.2010 18:41 |
Запрет на закрытие чужого приложения | S@fer | Win Api | 2 | 12.07.2009 19:47 |
Как скопировать текст чужого приложения? | Nikolay-niw32 | Общие вопросы Delphi | 17 | 12.03.2009 21:28 |
Как определить путь чужого приложения? | VVM | Win Api | 3 | 02.12.2008 18:22 |