ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
У тебя конкретные наработки то есть? Я читал твои посты на PP и так и не понял. Ты можешь использовать из внешней программы функции engine.dll например как ты хотел say2? Получать пакты из клиента я могу, а вот отправлять нет.
Из "внешней программы" невозможно впринципе, функции надо вызывать из адресного пространства клиента.
Скрин конкретной наработки:
Перехватывает пакет хукая UGameEngine::OnSay2()
Отправляет пакет с Say2 через UNetworkHandler::Say2()
Код совместим со всеми клиентами имеющими те же имена экспортов в engine.dll и core.dll, т.е. не используются статические адреса и другие константы.
Сорцы в аттаче.
Код оформлен в виде дллки которую надо подключить к клиенту. Для удобства добавлена прога которая цепляет дллку к l2.exe.
Язык - фасм+макросы.
Тестил на C6, должно работать и на других клиентах.
За это сообщение GoldFinch нажился 10 спасибками от:
Тестил на C6, должно работать и на других клиентах.
C4
Различие для С4
Engine.dll
?Init@UNetworkHandler@@UAEXHPAVUGameEngine@@@Z
в С4
?Init@UNetworkHandler@@UAEXHPAVFL2NetNotify@@@Z
Core.dll
??0L2ParamStack@@QAE@H@Z
в С4
??0L2ParamStack@@QAE@AAV0@@Z находится в Engine.dll
?PushBack@L2ParamStack@@QAEHPAX@Z
в C4
?PushBack@L2ParamStack@@QAEHPAX@Z находится в Engine.dll
?Top@L2ParamStack@@QAEPAXXZ
в С4
?Top@L2ParamStack@@QAEPAXXZ находится в Engine.dll
??1L2ParamStack@@QAE@XZ
в С4
??1L2ParamStack@@QAE@XZ находится в Engine.dll
Интересует перевод использования экспортируемых ф-ций на Delphi
Хз насколько актуален С4, однако переделать импорты или генерить импорты в инсталлере не проблема.
Кроме того используемый метод импорта и перехвата не совершенен, в идеале инсталлер должен анализировать клиент и настраивать (генерить) под него дллку.
Перенос под делфи делается так:
Импортируются функции, статически или динамически.
Т.к. делфи не поддерживает __thiscall , под каждую функцию пишется асм-переходник который либо записывает в ecx адрес глобального объекта, либо записывает в ecx 1й аргумент и перестраивает стек.
В 1м случае (с глобальными адресами) - функции вызываются как обычные stdcall, во 2м либо как объекты (нужно описать соотв классы) либо как простые функции.
ЗЫ: как это ни странно, переносить под С++ сложнее чем под делфи изза идиотской строгой типизации, через жопу реализованного импорта, кривого манглинга, и прочих радостей %) Вобщем хотел изначально переписать на сях, пока не получилось.
Последний раз редактировалось GoldFinch, 11.11.2008 в 20:00.