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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 16.12.2009, 21:31   #31
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

Цитата:
Сообщение от destructor Посмотреть сообщение
где этот код в клиенте?
поставь бряк на ws2_32.recv и увидишь где
GoldFinch вне форума   Ответить с цитированием
Старый 17.12.2009, 03:31   #32
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

destructor, только в клиенте руофа бряк на recv можешь не стараться ставить, не срабатывает...

Цитата:
Сообщение от Fertis Посмотреть сообщение
Блин, чет на дельфях невыходит сделать :\ неужели ни у кого нету хотя бы самых простых исходников? Помогите плз
что именно сделать не выходит?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 17.12.2009, 10:16   #33
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию

Ну вроде описал классы, экспорт функции недопонял до конца и как ее использовать :\ уже все перепробывал, вот хотелось бы чтоб выложили исходник показывающий пример использования хотя бы одной функции, а дальше думаю разберусь...

Функцию экспортирую так, но чую что неправильно :-]:
function GetUser(ID: integer): User; stdcall; external 'Engine.dll' name 'GetUser';

Так же ГолдФинч давал вот это, я так и не понял как этим пользоватся ><
function foo(obj:TObj , arg1:T1, arg2:T2);stdcall;
asm
pop eax //адрес возврата, временно сохраняем в eax
pop ecx //аргумент obj, записываем в ecx как того требует __thiscall
push eax //записываем сохраненный адрес возврата
jmp [foo] //вызываем метод
end;
Fertis вне форума   Ответить с цитированием
Старый 17.12.2009, 15:23   #34
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Fertis, импорт ты не не допонял а вообще не понял ничего кроме того что он должен быть...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 17.12.2009, 19:17   #35
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию

не... да я уже много че и как перепробывал... нужно экспортировать функцию и описать класс User, не? У меня голова просто уже совсем не варит. Или я походу вообще делаю что то не так, выложите лучше пример чтоли, как использовать хоть одну функцию... а то надоело все наугад делать :\
Fertis вне форума   Ответить с цитированием
Старый 18.12.2009, 00:35   #36
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 спасибками от:
Старый 18.12.2009, 10:48   #37
Пользователь
 
Аватар для Fertis
 
Регистрация: 07.03.2009
Сообщений: 64
Сказал Спасибо: 33
Имеет 2 спасибок в 2 сообщенях
Fertis пока неопределено
По умолчанию

пасиба, щас поковыряюсь )
Fertis вне форума   Ответить с цитированием
Старый 20.01.2010, 16:08   #38
Новичок
 
Регистрация: 14.08.2009
Сообщений: 14
Сказал Спасибо: 7
Имеет 3 спасибок в 2 сообщенях
Cooper85 пока неопределено
По умолчанию

Цитата:
Сообщение от xkor
NetworkPacket: Pointer
А кто-то может поделится примерной структурой этого дела ?
А-ля ПХ на мой взгляд не подходит.
Цитата:
Сообщение от GoldFinch
Структура NetworkPacket содержит отдельно ID пакета, размер данных пакета (без ID), данные пакета (без ID).
Это читал.

Добавлено через 10 часов 0 минут
DWORD - id пакета (id+sub id пакета), незанятые байты - мусор
DWORD - длина данных пакета без id и без длины

Последний раз редактировалось Cooper85, 20.01.2010 в 16:12. Причина: Добавлено сообщение
Cooper85 вне форума   Ответить с цитированием
Старый 21.01.2010, 00:14   #39
Местный
 
Регистрация: 18.02.2008
Сообщений: 141
Сказал Спасибо: 16
Имеет 66 спасибок в 30 сообщенях
ratvier
По умолчанию

Цитата:
Сообщение от Cooper85 Посмотреть сообщение
DWORD - id пакета (id+sub id пакета), незанятые байты - мусор
по сути - мусор, но всё же это выравнивание

Цитата:
Сообщение от Cooper85 Посмотреть сообщение
DWORD - длина данных пакета без id и без длины
последний раз, когда я там ковырялся, под длину выделялся WORD, а оставшиеся 2 байта - выравниевание O_o

а после этого шёл указатель на "тело" пакета, как-то так:
Код:
#pragma pack(push,1)
struct NetworkPacket
{
    char ID;
    char u1;
    char u2;
    char u3;
    short length;
    char u4;
    char u5;
    char* data;
};
#pragma pack(pop)
_______________________________________________
in pivo veritas %)) и пофиг что не правда %))))
ratvier вне форума   Ответить с цитированием
За это сообщение ratvier нажился спасибкой от:
Старый 21.01.2010, 03:51   #40
Новичок
 
Регистрация: 14.08.2009
Сообщений: 14
Сказал Спасибо: 7
Имеет 3 спасибок в 2 сообщенях
Cooper85 пока неопределено
По умолчанию

Цитата:
Сообщение от ratvier
Код:
struct NetworkPacket
{
    char ID;
    char u1; //subid
    char u2;
    char u3;
    short length;
    char u4; //=0
    char u5; //=0
    char* data;
};
Как-то так у меня получается...
Офф, здешний тестовый сервер.
Cooper85 вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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