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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 20.09.2011, 15:46   #1
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
maxilam пока неопределено
По умолчанию

в клиенте ГоД в некоторые функции добавили параметры. к примеру:
было
Код:
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 то вопросов не было бы. А вот с этим, яхз...
maxilam вне форума   Ответить с цитированием
Старый 20.09.2011, 20:15   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

maxilam, а в чем проблема то int - 32битное целое, __int64 - 64битное. следовательно новое значение либо как два int передаёшь либо собсно сразу как int64, в дельфи int64 есть, правда не помню с какой версии начиная
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 21.09.2011, 08:07   #3
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 46
Сказал Спасибо: 6
Имеет 19 спасибок в 12 сообщенях
maxilam пока неопределено
По умолчанию

ассемблер дельфийский не понимает int64 (Дельфи2010). при
push u; где u: int64 ругается Invalid combination of opcode and operands. Двумя интами пробовал передавать, клиент критует при вызове оригинальной функции.
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка? Альтернативой в дельфи вижу pointer, но однако с поинтером тоже критует при вызове оригинальной функции.
Вот уже третий день ломаю голову. может просто кто нибудь уже сталкивался с int64 в хуках функций, ведь в клиенте она не одна такая функция.
maxilam вне форума   Ответить с цитированием
Старый 21.09.2011, 12:13   #4
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от maxilam Посмотреть сообщение
Меня напрягает знак "&". Если не ошибаюсь, в Си это ссылка?
Да.Это ссылка)
Попробуй к примеру это значение принять и передать как DWORD (нам похрену сколько разрядов, передаем то только адрес значения)...
Aries вне форума   Ответить с цитированием
Старый 21.09.2011, 09:08   #5
Местный
 
Аватар для supernewbie
 
Регистрация: 23.09.2009
Сообщений: 1,232
Сказал Спасибо: 119
Имеет 172 спасибок в 134 сообщенях
supernewbie пока неопределено
По умолчанию

вот так робит , но это явно какое-то извращение

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.
__________________
Начало.
supernewbie вне форума   Ответить с цитированием
Старый 21.09.2011, 12:33   #6
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Вот не понятно только зачем по ссылке передавать константу
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 21.09.2011, 12:39   #7
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от Yegor Посмотреть сообщение
Вот не понятно только зачем по ссылке передавать константу
Ну чтобы случайно не изменить значение внутри функции... Это не означает, что само значение является константой
Aries вне форума   Ответить с цитированием
Старый 21.09.2011, 13:34   #8
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Не эт понятно, зачем тогда передавать по ссылке а не копию значения.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 21.09.2011, 13:43   #9
Местный
 
Аватар для Aries
 
Регистрация: 19.01.2011
Сообщений: 241
Сказал Спасибо: 7
Имеет 26 спасибок в 22 сообщенях
Aries пока неопределено
По умолчанию

Цитата:
Сообщение от Yegor Посмотреть сообщение
Не эт понятно, зачем тогда передавать по ссылке а не копию значения.
Ну сам же понимаешь, если адрес занимает меньше памяти, чем значение, то лучше передать адрес)))
хотя насчет данной ситуации - другой вопрос)
Aries вне форума   Ответить с цитированием
Старый 21.09.2011, 14:19   #10
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Цитата:
Сообщение от Aries Посмотреть сообщение
Ну сам же понимаешь, если адрес занимает меньше памяти, чем значение, то лучше передать адрес)))
хотя насчет данной ситуации - другой вопрос)
Тут тогда возникает вопрос почему не использовали обычный указатель.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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