![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
freezeman |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Всем привет!
Подскажите пожалуйста, может кто сталкивался с перехватом API функций. Мне необходимо перехватить функцию ReadFile... Причем перехват должен быть глобальным. Реализовал описанный здесь способ, там и код тоже приводится, но в результате не перехватывает, а на многие приложения, например, стандартный калькулятор даже не захотел зайти в функцию... Читал о фреймворке Microsoft Detours, как мне показалось, там намного проще все реализуется...скачал библиотеку попытался откомпилировать...вроде бы получилось, но при подключении в Visual Studio <detours.h> выдает ошибку о том, что не может найти этот файл...возможна проблема с компиляцией... Если кто работал с Detours, помогите, пожалуйста... Или может другие варианты есть...? Все пробовал как в Windows 7 x64, x86, так и в Windows XP x86. |
|||
|
||||
shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
сталкивался с этой проблемой, но от перехвата АПИ -функций я отказался так как она граничит с "хаком" и не всегда приемлема.
давно дело было, исходники свои я где-то посеял.. может со временем проростут. нашел только старый архив со статьями по которым в свое время монироли вопрос. Это сообщение отредактировал(а) shara - 7.1.2012, 16:58 Присоединённый файл ( Кол-во скачиваний: 26 ) ![]() -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
а решил проблему путем писания драйвера фильтра файловой системы. на мой взгляд это более легально\универсально\функциональней. Вот тут и тут обсуждения (да простят меня Одмины за сцылку на конкурирующий сайт
![]() Присоединённый файл ( Кол-во скачиваний: 30 ) ![]() -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
actuator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 15.12.2011 Репутация: нет Всего: 3 |
Значит, пути include не проставлены или проставлены неверно. Других причин у этой ошибки нет. |
|||
|
||||
freezeman |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Я пробовал, добавить в настройках путь к файлу detours.h, но при запуске проекта показывает > 100 ошибок. Возможно, что компиляция прошла неправильно? В VS 2010 не получается указать директорию, где хранятся эти .h-файлы... Просто очень надо...помогите разобраться, хотя бы настроить MS Detours для работы в Visual Studio... Ниже вывод при компиляции, если нужен будет. Вот вывод при компиляции через командную строку VS 2005 Express: cd "C:\Documents and Settings\SMan\??????? ????\Detours Express 3.0\src" if not exist "..\include" mkdir "..\include" if not exist "..\lib.X86" mkdir "..\lib.X86" if not exist "..\bin.X86" mkdir "..\bin.X86" if not exist "obj.X86" mkdir "obj.X86" cl /W4 /WX /Zi /MTd /Gy /Gm- /Zl /Od /DWIN32_LEAN_AND_MEAN /D_WIN32_WINNT=0x403 /Gs /DDETOURS_X86=1 /DDETOURS_32BIT=1 /D_X86_ /Fd..\lib.X86\detours.pdb /Foobj.X86\detours.obj /c .\detours.cpp detours.cpp .\detours.cpp(9) : fatal error C1083: Cannot open include file: 'windows.h': No such file or directory Вот вывод при компиляции через командную строку VS 2010: Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
actuator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 15.12.2011 Репутация: нет Всего: 3 |
У тебя обе студии на одном компьютере? Возможно, проблемы из-за этого.
В 2005 как положено, при помощи nmake компилировал? У тебя, как минимум, не прописан путь к Windows SDK в INCLUDE, а может ещё и в LIB. Переменные должны выглядеть как-то так (у меня, к сожалению, только 2008 версия):
В 2010 - из-за чего не получается? Библиотеки без своих солюшнов добавляются так. Щелкаешь правой кнопкой по своему проекту в обозревателе решений, выбираешь в меню пункт свойства, далее тебе нужны: Свойства конфигурации -> C/C++ -> Общие, Дополнительные каталоги включения (добавляешь туда путь папки include библиотеки detours) Свойства конфигурации -> Компоновщик -> Общие, Дополнительные каталоги библиотек (добавляешь туда путь папки lib.X86) Ну и конечно не стоит размещать проекты в папках с русскими символами в пути, от этого бывают странные проблемы. |
|||
|
||||
freezeman |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Попробовал в VS 2010 подключить, как вы сказали, добавил #include <detours.h>, но при компиляции выдает супер-много ошибок ~120... Почему так происходит... в чем может быть проблема? Попробовал тоже сделать в Visual C++ 2005 Express... тоже самое. Это сообщение отредактировал(а) freezeman - 10.1.2012, 10:28 |
||||
|
|||||
GremlinProg |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
freezeman |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Спасибо за ответ.. Но только что получилось, дополнительно нужно было подключить windows.h и все компилируется... правда предстоит ещё много работы по реализации глобального статического перехвата...есть опыт в этом? |
||||||
|
|||||||
freezeman |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Как реализуется Глобальный перехват в MS Detours... если можно привести примеры или ссылки скинуть,
помогите кто-нибудь... |
|||
|
||||
actuator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 15.12.2011 Репутация: нет Всего: 3 |
Найди в документации раздел Using Detours - там пример DLL-ки, которая делает перехват функции для процесса, к которому подключается, доработай его и добавь путь к ней в "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs" - тогда она будет подключаться ко всем процессам, где используется библиотека user32 (то есть, практически всем). В примере адрес перехватываемой функции получается статически, но его ещё можно найти в таблицах импорта/экспорта соответствующими функциями.
|
|||
|
||||
freezeman |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
При компиляции выдает ошибки, что с ними делать понятия не имею!!
------ Перестроение всех файлов начато: проект: msdetours, Конфигурация: Debug Win32 ------ ... dllmain.obj : error LNK2019: ссылка на неразрешенный внешний символ _DetourDetach@8 в функции _DllMain@12 dllmain.obj : error LNK2019: ссылка на неразрешенный внешний символ _DetourTransactionCommit@0 в функции _DllMain@12 dllmain.obj : error LNK2019: ссылка на неразрешенный внешний символ _DetourAttach@8 в функции _DllMain@12 dllmain.obj : error LNK2019: ссылка на неразрешенный внешний символ _DetourUpdateThread@4 в функции _DllMain@12 dllmain.obj : error LNK2019: ссылка на неразрешенный внешний символ _DetourTransactionBegin@0 в функции _DllMain@12 c:\documents and settings\sman\мои документы\visual studio 2010\Projects\msdetours\Debug\msdetours.dll : fatal error LNK1120: 5 неразрешенных внешних элементов СБОЙ построения. Затраченное время: 00:00:05.77 ========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ========== код:
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
freezeman |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Спасибо, добавил
всё заработало... |
||||
|
|||||
freezeman |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 21.1.2011 Репутация: нет Всего: нет |
Прописал в реестре "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs" путь к своей dll,
запустил программу, но ничего не перехватывает...Поискал функцию внедрения, но тоже не работает... Dll:
Main:
Это сообщение отредактировал(а) freezeman - 11.1.2012, 10:51 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |