> если мне нужно посмотреть весь путь который проходит запрос > к примеру от функции ReadFile до самого низа и обратно, > т.е. отслеживать вызовы внутренних процедур ОС углубляясь > все дальше и дальше и возвращаясь обратно на верх ...
В статье приводится описание одного из способов перехвата вызовов функций. Описываемый механизм перехвата - замена первых 5 байт перехватываемой функции на код команды jmp. Обсуждаются некоторые важные моменты, возникающие при реализации перехвата. Исходный текст на C++ варианта ловушки прилагается.
Чо то я ничо не понимаю!
Или у меня чтото не работает или эта прога не работает,
Комилю прогу,
и она мне выводит мессагбоксы
Calling MessageBox() 1
второй мессагбокс
Calling MessageBox() 2
и третий мессагбокс
Calling MessageBox() 3
Так должно и быть?
сюдя по коду мессагбокс Calling MessageBox() 2 должен заменятся на другое, но чото этого не происходит
Поправтеменя если я чонить не понял
последовательность дейстий при которой точно работает :
(если что то делаешь не так, то разбирайся сам)
1) скачиваешь (! мало ли чего ты там наменял) архив с исходниками
2) распаковываешь его
3) даблкликаешь файл apihook.dsp
4) в VC нажимаешь Ctrl+F5 или на тулбаре кнопочку с красным восклицательным знаком :)
> последовательность дейстий при которой точно работает : > (если что то делаешь не так, то разбирайся сам) > 1) скачиваешь (! мало ли чего ты там наменял) архив с > исходниками > 2) распаковываешь его > 3) даблкликаешь файл apihook.dsp > 4) в VC нажимаешь Ctrl+F5 или на тулбаре кнопочку с красным > восклицательным знаком :) > > всё должно работать Всё так и сделал. скачал файл с www.uinc.ru
кликнул по apihook.dsp
нажал на Ctrl + F5
Оно скомпилилось и запустилось,
а дальше было то, о чом я уже писал выше
НУ не работает она!!
у меня работает
судя по тому, что больше никто не пишет про глюк и у других работает
если хочешь можешь попробовать посмотреть в дебагере где происходит ошибка:
1) входишь в функцию CAPIHook::Attach()
2) смотришь какая из функций Win32 обламывается
3) посмотри какой код ошибки возвращает ::GetLastError()
При трассировке при входе в Attach оно нигде не возвращает false, но при трассировке нельзя вызвать мессагбокс после аттача, типа Can't traced to dll
А не трейся пишу так:
bool rez = hook.Attach(GetCurrentProcess(), MessageBox, (void*)0x400000,Hook, 55555);
if(rez == false)
{
char buf[0x100];
sprintf(buf, "%d", hook.GetStatus());
MessageBox(NULL, buf, "error", MB_OK);
}
Код ошибки 87
да напишу полный пример не только с перехватом функции, но и с нормальным внедрением длл
только чуть попозже
может через несколько дней
щас времени нет
и ещо27.10.01 01:06 Автор: Лamo Статус: Незарегистрированный пользователь
сделал пример работы с другим процессом
скоро статья обновится
если хочешь раньше - оставь мыло - пришлю
перехватываю MessageBox, поэтому в в9х это не будет работать :)
но по примеру можешь перехватить любую другую функцию из других длл
(только функция, вызываемая из основной ловушки, у меня тоже на ассемблере написана)
и ещо27.10.01 13:43 Автор: Лamo Статус: Незарегистрированный пользователь
> Что будет, если скажем функция ,которая перехватывается, > вызывается одновременно , скажем из разных потоков??
а ниче ;) ... веренее все что угодно.. а вот если ты будешь использовать объекты синхронизации типа критических секций то вызовы из разных потоков будут упорядочены и все будет работать намана... тока не забывай о взаимной блокировке.. :)))