Вернуться   CoderX :: Forums > Основные форумы > Полезности
Войти через OpenID

Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
 
 
Опции темы Опции просмотра
Старый 18.12.2009, 00:35   #11
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Fertis, ок, вот так хукаю функцию UNetworkHandler::AddNetworkQueue
delphi Код:
HookProc('engine.dll','?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z',            @UNetworkHandler_AddNetworkQueue_Hook,@UNetworkHandler_AddNetworkQueue_Original);
в результате при вызове клиентом AddNetworkQueue сначала вызывается моя UNetworkHandler_AddNetworkQueue_Hook:
delphi Код:
procedure UNetworkHandler_AddNetworkQueue_Hook(NetworkPacket: Pointer); stdcall; asm   push    ecx   push    [ebp+8]   push    ecx   call    UNetworkHandler_AddNetworkQueue_New   pop     ecx end;
которая собсно всего лишь прослойка к полноценной функции UNetworkHandler_AddNetworkQueue_New:
delphi Код:
procedure UNetworkHandler_AddNetworkQueue_New(unh: Integer; np: PNetworkPacket); stdcall; begin   // тут код для логирования того что пришло в функцию   // сохраняем указатель на объект UNetworkHandler   nh:=Pointer(unh);   // Вызываем клиентскую UNetworkHandler::AddNetworkQueue   UNetworkHandler_AddNetworkQueue_Call(np); end;
ну просто для импорта достаточно засунуть в UNetworkHandler_AddNetworkQueue_Original указатель на UNetworkHandler::AddNetworkQueue и вызвать UNetworkHandler_AddNetworkQueue_Call, короче примерно так:
delphi Код:
var   nh: Pointer; // <-- в эту переменную надо засунуть указатель на объект UNetworkHandler   UNetworkHandler_AddNetworkQueue_Original: procedure(NetworkPacket: Pointer); stdcall; procedure UNetworkHandler_AddNetworkQueue_Call(NetworkPacket: Pointer); stdcall; asm     mov     ecx, nh     mov     esp, ebp     pop     ebp     jmp     [UNetworkHandler_AddNetworkQueue_Original] end; begin   UNetworkHandler_AddNetworkQueue_Original:=GetProcAddress('engine.dll','?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z');     // вызываем импортированную функцию   UNetworkHandler_AddNetworkQueue_Call(параметр); end.

Добавлено через 4 минуты
UNetworkHandler_AddNetworkQueue_Hook и UNetworkHandler_AddNetworkQueue_Call прослойки нужные для того чтоб перейти от thiscall к stdcall соглашению
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 18.12.2009 в 00:35. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 12 спасибками от:
 

  CoderX :: Forums > Основные форумы > Полезности



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:06.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!