Полезности Исключительно для полезных тем из других разделов.
Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
20.09.2011, 15:46
#1
Пользователь
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
в клиенте ГоД в некоторые функции добавили параметры. к примеру:
было
Код:
OnUserInfo(struct User *, class FVector, int, int, int, char, char)
стало
Код:
OnUserInfo(struct User *, class FVector, int, int, int, char, char, __int64 const &)
Как правильно передавать последний параметр (
__int64 const & ) из функции-ловушки в функцию-обработчик и потом в оригинальную функцию?
Старый кусок кода:
Код:
procedure OnUserInfo_Call(user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
asm
push s2;
push s1;
push u3;
push u2;
push u1;
push z;
push y;
push x;
push user;
mov ecx, geh;
mov esp, ebp;
pop ebp;
jmp [OnUserInfo_Original];
end;
procedure OnUserInfo_New(h: integer; user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
begin
...
//делаем свои делишки
...
OnUserInfo_Call(user, x,y,z, u1,u2,u3, s1,s2);
end;
procedure OnUserInfo_Hook(user: pointer; x,y,z: single; u1,u2,u3: single; s1,s2: integer); stdcall;
asm
push s2;
push s1;
push u3;
push u2;
push u1;
push z;
push y;
push x;
push user;
push ecx;
call OnUserInfo_New;
end;
Как теперь передавать этот последний параметр? Я просто не пойму синтаксис Си, что означает этот параметр? Если бы был простой int, char или pointer то вопросов не было бы. А вот с этим, яхз...
20.09.2011, 20:15
#2
Admin!
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
maxilam , а в чем проблема то int - 32битное целое, __int64 - 64битное. следовательно новое значение либо как два int передаёшь либо собсно сразу как int64, в дельфи int64 есть, правда не помню с какой версии начиная
__________________
Я здесь практически не появляюсь!, Skype - ikskor
21.09.2011, 08:07
#3
Пользователь
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
ассемблер дельфийский не понимает int64 (Дельфи2010). при
push u; где u: int64 ругается Invalid combination of opcode and operands. Двумя интами пробовал передавать, клиент критует при вызове оригинальной функции.
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка? Альтернативой в дельфи вижу pointer, но однако с поинтером тоже критует при вызове оригинальной функции.
Вот уже третий день ломаю голову. может просто кто нибудь уже сталкивался с int64 в хуках функций, ведь в клиенте она не одна такая функция.
21.09.2011, 12:13
#4
Местный
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Цитата:
Сообщение от
maxilam
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка?
Да.Это ссылка)
Попробуй к примеру это значение принять и передать как DWORD (нам похрену сколько разрядов, передаем то только адрес значения)...
21.09.2011, 09:08
#5
Местный
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
вот так робит
, но это явно какое-то извращение
delphi Код:
procedure Test( const i:Int64 ) ; stdcall;
begin
ShowMessage ( inttostr ( i) ) ;
end ;
var
i:Int64 ;
a:array [0 ..1 ] of integer ;
i1,i2:integer ;
begin
i:=874987897987 ;
Move ( i,a,8 ) ;
i1:=a[0 ];
i2:=a[1 ];
asm
push i2
push i1
call test
end ;
end .
__________________
Н а ч а л о .
21.09.2011, 12:33
#6
Местный
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Вот не понятно только зачем по ссылке передавать константу
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
21.09.2011, 12:39
#7
Местный
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Цитата:
Сообщение от
Yegor
Вот не понятно только зачем по ссылке передавать константу
Ну чтобы случайно не изменить значение внутри функции... Это не означает, что само значение является константой
21.09.2011, 13:34
#8
Местный
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Не эт понятно, зачем тогда передавать по ссылке а не копию значения.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
21.09.2011, 13:43
#9
Местный
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Цитата:
Сообщение от
Yegor
Не эт понятно, зачем тогда передавать по ссылке а не копию значения.
Ну сам же понимаешь, если адрес занимает меньше памяти, чем значение, то лучше передать адрес)))
хотя насчет данной ситуации - другой вопрос)
21.09.2011, 14:19
#10
Местный
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Цитата:
Сообщение от
Aries
Ну сам же понимаешь, если адрес занимает меньше памяти, чем значение, то лучше передать адрес)))
хотя насчет данной ситуации - другой вопрос)
Тут тогда возникает вопрос почему не использовали обычный указатель.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Опции темы
Опции просмотра
Комбинированный вид
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 06:57 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!