Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[DELPHI] Выпадает приложение при перехвате

64K
20 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
278
20 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
1. А где, собственно, внедрение в чужой процесс? Я пока увидел работу только в рамках своего процесса. Или прозевал что-то?

2.
[QUOTE=GRA1N]
 
Код:
SetCodeHook(GetProcAddress(GetModuleHandle('gameShieldDll.dll'), 'frostSend'), GetProcAddress(GetModuleHandle('lib.m3d'), 'hookfrostsend'), @SystemFunctionBridge)

[/QUOTE]
Возможно, вам удастся меня переубедить, но меня несколько смущает тот факт, что вы пишете старое содержимое функции в адресное пространство библиотеки lib.m3d. Вы пробовали разобраться с механизмом сплайсингом "вручную", без ApiHookTools?
64K
20 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
64K
20 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
278
20 ноября 2011 года
Alexander92
1.1K / / 04.08.2008
Здравствуйте.
По правде говоря, сходу та ситуация, которую вы описываете, может напомнить мне две вещи: либо выход за границу доступной памяти при чтении / записи, либо нарушения соглашений о вызовах функций. Не помню, правда, как с последним обстоит дело конкретно в Делфи, надеюсь, более опытные дельфисты поправят меня, если я неправ.
Объясню аккуратнее, что меня смущает. Я специально вкратце ознакомился с ApiHookTools перед тем, как вам отвечать; если правильно помню, SetCodeHook осуществляет выделение памяти по адресу, который был передан в NewProcAddress. Вы туда передаете адрес некоей процедуры hookfrostsend, расположенной внутри lib.m3d. Отсюда вопрос: что там изначально находится? Какая-то заглушка? Или нет? Можете ли вы гарантировать, что там хватает памяти под исходную функцию?
Наконец, почему я начал говорить о "ручном" сплайсинге: если бы вы делали все вручную, то вам бы, скорее всего, не пришлось указывать конкретный адрес, куда копировать старую функцию, вы бы вызвали какую-нибудь VirtualAllocEx, которая бы сама нашла свободное место в нужном объеме и просто вернула бы адрес.

P.S. Прошу меня простить, надо выходить, завтра отпишусь, как буду тут.
P.P.S. Если что, можете писать в ICQ, постараюсь ответить.
64K
20 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
14
22 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
вы уверены в правильности сигнатуры перехватываемой функции?
не учтена мультитредовость.
что возвращается в oldfrostSend ?
64K
22 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
64K
22 ноября 2011 года
GRA1N
10 / / 26.01.2011
[SIZE="1"]удалено[/SIZE]
14
22 ноября 2011 года
Phodopus
3.3K / / 19.06.2008
Цитата: GRA1N
Старая функция возвращает число записанных в сокет байт, как и оригинальная winsock-овская send.


Я спрашивал не о результате фукции, а о значении в oldfrostSend. Выведите его и выведите адреса GetProcAddress(GetModuleHandle('gameShieldDll.dll'), 'frostSend'), GetProcAddress(GetModuleHandle('lib.m3d'), 'hookfrostsend' перед установкой хука.

Цитата: GRA1N

Про мультитредовость пожалуйста поподробнее, вы имеете ввиду, что в тот момент, когда я ставлю перехват, эта функция чем-то вызывается? В таком случае мне было бы интересно, как сделать suspend всем потокам, кроме моего, в момент установки хука :)


Это тоже в небольшой степени. Ваш перехватчик - не мультредовый, если он будет вызыватся одновременно из нескольких потоков - жди беды.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог