supernewbie, туда приходит параметром указатель, изначально равный нулю, где после вызова оригинала будет лежать адрес указателя где лежит пакет, тоесть работать с ним нужно после вызова оригинала.
А постоянно вызывается это как раз игра пакеты пришедшие забирает.
как туда может приходить 0 и выходить не 0? что за черт возьми мать твою)) ну ладно, попытаюсь хукнуть в конце
Добавлено через 2 минуты
внатуре же, тока там не указатель равен нулю, а по указателю 0 лежит...
Добавлено через 54 секунды
так, блин, таблицу менять круче было, а то я в сплайсинге до конца не разобрался..
Добавлено через 47 секунд
ну давайте попробуем... узнать бы еще где у этой функции конец
Добавлено через 2 минуты
function SizeOfProc(Proc: pointer): dword; надеюсь эта штука работает
Добавлено через 8 минут
вот как я понял, сплайсинг из advApiHook строится на том, что они сохраняют старую функцию, гадят в нее джампом, и потом из новой вызывают сохраненную, это так?
Добавлено через 55 секунд
а как установить джамп не повреджая код оригинальнйо функции? и как вернутся обратно? просто сделать джамп в след строку кода в оригинальной функции после моего джампа будет достаточно?
Добавлено через 38 минут
PS попробовал делать SetLength стринг строки, и потом вставлять символы по индексам, тоже критует, отстой какой-то
Добавлено через 7 минут
да не, короче дело вообще не в том что там какие-то сокеты да че, он просто критует, какого хера - хз, ну помогите кто-нибудь(( че не так с этой стринг строкой, TList нормально в памяти размещается как-то, массивы тоже, даже динамические, если нормально память выделять, а вот с стринг строками никак!
Добавлено через 10 минут
блин нет, я явно что-то не так делаю, т.к. криты становятся просто РЕЖЕ, как вообще нужно выделять память в чужом приложении для своей дллки в нем?
Добавлено через 27 минут
я уже не знаю, НУ ЧТО тут может быть не так
delphi Код:
procedure Proc;
var
i:integer;
s,s1:string;
j:cardinal;
begin
s:='';
if PacketsFromServer.Count>0thenbeginwith TFullPacketServer(PacketsFromServer.Items[0])dobegin
j:=3;
if id2<>-1theninc(j,6);
SetLength(s,length(s)+(length(data)*3)+j);
s1:=IntToHex(id,2);
s[1]:=s1[1];
s[2]:=s1[2];
s[3]:=' ';
if id2<>-1thenbegin
s1:=IntToHex(id2,4);
s[4]:=s1[1];
s[5]:=s1[2];
s[6]:=' ';
s[7]:=s1[3];
s[8]:=s1[4];
s[9]:=' ';
end;
for i:=0tolength(data)-1dobegin
s1:=inttohex(data[i],2);
s[j+1]:=s1[1];
s[j+2]:=s1[2];
s[j+3]:=' ';
inc(j,3);
end;
end;
Writeln('FromServer:'+s);
PacketsFromServer.Delete(0);
end;
end;
__________________ Начало.
Последний раз редактировалось supernewbie, 03.02.2011 в 01:18.
Причина: Добавлено сообщение
1. если в процедуре proc закоментить вообще все то все равно крашится ?
2. procedure AddNetworkQueue_hook(np:PNetworkPacket); stdcall;
что это? stdcall; в делфи не соответвует соглашению stdcall в с++
И вообще функция UNetworkHandler::AddNetworkQueue(struct NetworkPacket *) идет thiscall, ты используешь специальный переходник для корректного вызова функции AddNetworkQueue_hook?