|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
11.08.2011, 00:20 | #1 |
Недо
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,394
|
Вызов функций другой программы
Приветствую!
Более менее опытные программисты знают, как можно вызывать функцию из DLL, как найти адрес функции зная имя (WINAPI)... Вопрос: зная адрес функции (функция внутренняя, программы самой, не апи) во внешней программе, а также ее параметры как в делфи произвести такой вызов? Не нашел ответа в сети.
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
|
11.08.2011, 00:24 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
процесс А и процесс Б существую совершенно независимо друг от друга(ну и исключения взаимодействия через АПИ)
если не сделать специальную архитектуру(например COM или чтото еще) для обмена данными, то так сделать не выйдет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
11.08.2011, 00:36 | #3 |
Недо
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,394
|
Может быть я не правильно выражаюсь...но мне точно известно, что в С++ используется функция CALL для этой задачи, один не очень близкий знакомый вызывает функцию из игрового приложения с соответствующими параметрами, например, очистка консоли. Находит адреса и параметры используя IDA. Я бы хотел понять как он это делает, принцип работы?
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
|
11.08.2011, 00:41 | #4 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
в самом С++ не существует такой функции.
она самописна, так что просите у знакомого исходники этой функции(у меня есть мысли как она работает, но разбиратся я с этим не хочу, мне компилятора своего хватает...) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
11.08.2011, 11:46 | #5 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Внедрить в чужое адресное пространство библиотеку, сделать из неё call. Но это небезопасно, т.к. нет гарантии, что программа не решит в этот же момент обратиться к тем же данным, по-хорошему нужно вначале приостановить основной поток.
http://programmersforum.ru/showpost....6&postcount=18
пыщь
Последний раз редактировалось JTG; 11.08.2011 в 11:48. |
11.08.2011, 14:28 | #6 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Кой-какая мат-часть:
http://www.gunsmoker.ru/2011/04/windows.html http://www.transl-gunsmoker.ru/2009/...e-hmodule.html http://www.delphikingdom.ru/asp/view...?catalogid=548 http://msdn.microsoft.com/en-us/libr...74(VS.85).aspx
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
11.08.2011, 22:44 | #7 |
Недо
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,394
|
JTG, да, спасибо, это по сути то, что нужно. Однако, инъекцию получается сделать, но код DLL не исполняется. Думаю.
Не подскажите что может послужить причиной не выполнения кода внедренной DLL? Функция внедрения возвращает истину, но ничего не происходит. Функция внедрения: Код:
Код:
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
Последний раз редактировалось Stilet; 12.08.2011 в 20:44. |
12.08.2011, 20:48 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Ты куда указываешь то адресом?
I'm learning to live...
|
|
12.08.2011, 20:49 | #9 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
WriteProcessMemory - это функция
Цитата:
У него сама либа не инжектируется. Последний раз редактировалось Stilet; 12.08.2011 в 21:34. |
|
12.08.2011, 21:08 | #10 |
Недо
Участник клуба
Регистрация: 11.08.2011
Сообщений: 1,394
|
Mss, возможно так. Я запускал программу в режиме отладки (IDA pro) ту, в которую делаю инжект. В логе видно, что в момент инжекта создается новый поток, но он тут же закрывается (Exit Thread).
Почему не происходит инжект? Есть предположения? Антивируса в системе нет.
С помощью программирования можно разбогатеть и изменить мир к лучшему (с) Бьерн Страуструп
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Dll в ресурсах и вызов функций из нее | Obsever0 | Общие вопросы Delphi | 15 | 15.09.2015 23:46 |
Вызов функций на Ассемблере в программе на С++ | РагнаР | Общие вопросы C/C++ | 1 | 30.05.2011 16:15 |
объявление функций и вызов | SnOoPKa | Общие вопросы C/C++ | 3 | 30.01.2011 01:53 |
Вызов другой программы | Anatoly555 | Помощь студентам | 1 | 18.03.2010 08:08 |
Повторный вызов функций | Roman | Общие вопросы C/C++ | 1 | 10.06.2009 14:48 |