Показать сообщение отдельно
Старый 06.10.2010, 20:37   #177
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

невтыкаю что за маневры выполняет my_hook )))
ложит в ЕСХ какуюто локальную переменную
сует в стек как я понял адрес возврата.

в итоге ??1FCanvasUtil@@UAE@XZ вызываетса с какимто непонятным "экземпляром класса" когда в ЕСХ должен лежать обьект из [ebp+74h+var_254]

Добавлено через 13 минут
Код:
procedure __AddNetworkQueue_Hook;
begin
 asm
  pushad
  mov EAX , ECX
  mov UNETWORKHANDLER_a, EAX // сохряняем в глобальной переменной указатель на обьект end;
 EnterCriticalSection(CSSS);
  //получаем указатель на сендпакет
  pSendPacket:=PPointer(Pdword(PDword(dword(UNETWORKHANDLER_a)+$48)^)^+$6C)^;
  ppSendPacket:=Pointer(Pdword(PDword(dword(UNETWORKHANDLER_a)+$48)^)^+$6C);
  pNetworkObject:=Ppointer(dword(UNETWORKHANDLER_a)+$48)^;
  // снимает сплайсинг отменяем перехват
  TTM.ResetTrap(phtrap);
  phtrap:=nil;
 LeaveCriticalSection(CSSS);
 IDirect3DDevice9H(idev_).StrWrite('done : packet trap unmounted',0);
 // устанавливаем перехват адднетворк... через VMT таблицу (сплайс для нас слишком грубо)
 InitVMTHandlers;
 // устанавливаем хук на сендпакет тоже
 TL2C.nhandler._hphandler:=TTM.SetupIndirectTrap(pointer(ppSendPacket),0,@_sendpacket_trap,@_postsendpacket_trap,false);
 //восстанавливаем все регистры и стек
 asm
  popad
  xor eax, eax
  not eax
  ret 004
 end;
end;


function HandleNetworkTrap:BOOL;
var
 forig : pointer;
 dll:DWORD;
begin
 EnterCriticalSection(CSSS);
 try
 try
 result:=false;
 if UNETWORKHANDLER_a<>nil then exit;
 dll:=GetModuleHandle('engine.dll');
 forig:=GetProcAddress(dll,'?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z');
 //делаем хук через сплайсинг
 phtrap:=TTM.SetupHardTrap(forig,0,@__AddNetworkQueue_Hook);
 if phtrap<>nil then begin
  IDirect3DDevice9H(idev_).StrWrite('done : packet trap mounted',0);
  result:=true;
 end;
 if phtrap=nil then begin
  IDirect3DDevice9H(idev_).StrWrite('error : mounting packet trap',0);
  exit;
 end;
 finally
  LeaveCriticalSection(CSSS);
 end;
 except
  smessage('error : setup trap critical error');
 end
end;
а перехватить ченеть типа этого невозможно?)
так я получаю указатели на обьект нетворкхандлера

Последний раз редактировалось mira, 06.10.2010 в 20:37. Причина: Добавлено сообщение
mira вне форума   Ответить с цитированием
За это сообщение mira нажился спасибкой от: