IPB

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику baratorch. Спасибо сказали: 4484
Дата поста: В теме: За сообщение: Спасибо сказали:
20 Nov 2017, 15:09 patсher_x86
В DIRECT_ HiHook наша замещающая функция должна 100% соответствовать соглашению о вызовах замещаемой.

т.е. если мы ставим хук на __thiscall функцию, то наша должна быть тоже __thiscall, а точнее принимать первый аргумент в ecx, остальные в стеке.
если мы ставим хук на __fastcall, то наша должна принимать аргументы в ecx, edx и стеке.
если на __cdecl, то наша функция должна возвращать управление по retn, а не по retn (4 * колво аргументов в стеке) как это делают __stdcall, __fastcall, __thiscall

В VC++ нет проблем с объявлением __stdcall, __cdecl, __fastcall функций
__thiscall объявить нельзя, но вместо нее можно использовать __fastcall (a1, no_used, a2, ...)

Не знаю как с этим обстоят дела в Делфи/Паскале. С __stdcall проблем не должно быть, __cdecl вроде тоже поддерживается, а вот насчет __fastcall и __thiscall я не уверен.

DIRECT_ HiHook не передает указатель на хук в замещающую функцию и не создает никаких мостов, он передает управление сразу прямо на нашу замещающую функцию.
Berserker
20 Nov 2017, 03:12 patсher_x86
Цитата
А как насчёт map-файла? Можешь скомпилировать библиотеку с генерацией оного?

map сделаю к следующей версии патчера, которая выйдет на днях.
Berserker
19 Nov 2017, 21:25 patсher_x86
Berserker, в патчере целиком и полностью забито на многопоточность.
Точнее в патчере:
1. нельзя создавать/ставить/отменять патчи/хуки в несколько потоков.
2. нельзя выполнять код с LoHook и HiHook (кроме DIRECT_) хуками в несколько потоков.
можно в несколько потоков выполнять Asm и DIRECT_ HiHook хуки.
3. нельзя пользоваться методами VarInit и VarFind в несколько потоков.

Цитата
В дополнение к предыдущему посту. Бара, ты используешь VirtualProtect для того, чтобы дать странице памяти права READ_WRITE_EXECUTE, но не возвращаешь оригинальные права обратно после применения патча.

Вообще-то обратно возвращаю.
Berserker
14 Nov 2017, 11:23 patсher_x86
Здесь последний патчер версии 4.2.9.1, хэдер для C++ версии 4.2 и pas-файл версии 2.1:
скачать патчер SDK
Ben, Berserker
12 Nov 2017, 06:48 patсher_x86
Цитата
адрес затёртого кода, хранимого в мосте:
[затёртая команда 1]
[затёртая команда 2]
[возврат на адрес после затёртых команд]

я не понимаю зачем давать пользователю LoHook'a возможность обращаться к адресу затертого кода в мосте
и зачем вызывать такое внутри Handler, ведь на момент вызова этого будет неактуальным и непредсказуемым содержимое регистров.

после return EXEC_DEFAULT в Handler
в мосте происходит следующее:
1. значения всех регистров из контекста (HookContext::eax, ...) копируются в соответствующие регистры
2. выполняется затертый код (затертая команда 1, затертая команда 2, ...)
3. прыжок на HookContext::return_address. Если внутри Handler он не изменялся, то это будет адрес после затёртых команд в исходном коде.
Что тут тебе еще может быть нужно, я не понимаю.

Цитата
Были баги, кода перезаписал места вида ADD ESP, XXX или PUSH XXX или POP XXX. У тебя такие проблемы исключены?

проблем c уcтановкой ЛоуХука на команды изменяющие esp - нет.


Цитата(baratorch)
Код
int __stdcall Handler(LoHook* h, HookContext* c)
{
какой-то код...
...
выполнить затертое
...
какой-то код...
}

Здесь главное то, что после выполнения затертого еще можно выполнить еще какой-то свой код внутри Handler.
Под затертым я имею в виду реально затертое (это может быть джамп другого хука, о котором мы не знаем),
А так-то мы всегда можем в Handler продублировать затираемый оригинальный код манипуляциями с HookContext::eax, ...
Berserker
11 Nov 2017, 21:21 patсher_x86
переделал свой тест

добавил в тестируемый код pushfd - popfd
и добавил еще 2 варианта


Код
pushad...  : 10172
push edi...: 9781
push eax...: 9906
old...  : 12172
new...  : 10984

Код
pushad...  : 5912
push edi...: 5506
push eax...: 5398
old...  : 7566
new...  : 6053


old - это то как реализовано перемещение регистров в стек и обратно в последнем опубликованном patcher_x86 4.2.8
через кучу, т.е. некоторые значения проходят путь: регистр -> куча -> стек -> куча -> регистр.

new - это новая реализация: регистр -> стек -> стек -> регистр

По моему очень неплохо для новой, да и старая показывает результат того же порядка. И это 500 000 000 итераций
уж в рамках героев разницей точно можно пренебречь.
Berserker
11 Nov 2017, 21:01 patсher_x86
Цитата(Berserker)
Я так понимаю, как LoHook нет метода, возвращающего адрес в рамках моста для вызова оригинальной (замещённой функции) или оригинальных команд с последующим продолжением исполнения, как если бы патча не существовало?.

Я что-то не понял вопроса.
Всмысле можно ли поставить LoHook который ничего не делает (просто выполняет затертый код)?
Да, можно:
Код
int __stdcall NopFunc(LoHook* h, HookContext* c)
{
return EXEC_DEFAULT;
}
...
_PI->WriteLoHook(0xAABBCC, NopFunc);

или нужно что-то вроде:
Код
int __stdcall Handler(LoHook* h, HookContext* c)
{
какой-то код...
...
выполнить затертое
...
какой-то код...
}

если да, то такое нельзя сделать.
такое есть в WriteAsmHook:
_PI->WriteAsmHook("какие-то команды....; _ExecDefault; какие-то команды...", 0);

Цитата
LoHook нет метода, возвращающего адрес в рамках моста для вызова оригинальной (замещённой функции)

для LoHook нет понятия оригинальной (замещенной) функции.
LoHook устанавливается просто на код. Что там за код под ним - не имеет значения.

Я из кода эры не очень могу понять как устанавливается HOOKTYPE_BRIDGE хук.
В самом мосте адрес возврата у тебя не пушится.
Но в контексте он есть, так?
Значит от попадает в стек до выполнения моста, так?
Значит перенаправление на сам мост из оригинального кода идет посредством call?


У меня же перенаправление на мост идет посредством jmp
а адрес возврата помещается в контекст внутри моста.

Второе. Я правильно понимаю что в твоем HOOKTYPE_BRIDGE мосте, если Handler возвращает EXEC_DEFAULT,
то мост игнорирует адрес возврата из контекста и прыгает обратно туда, куда должен по умолчанию?

У меня же в мост прыгает по адресу возврата из контекста , который мы возможно изменили внутри Handler, в любом случае: вернул ли Handler SKIP_DEFAULT или EXEC_DEFAULT
Berserker
11 Nov 2017, 16:13 patсher_x86
озадачился я вопросом скорости выполнения моста
состряпал тест вот с таким кодом:




скачать тестовый экзешник

результат несколько неожиданный

на моем рабочем ноуте такой:
pushad... : 3074
push edi...: 2386
push eax...: 2590

на лобби сервере для Хоты:
pushad... : 6719
push edi...: 4547
push eax...: 4625

* можно посмотреть в отладчике что тест выполняется честно
* при перестановке местами вариантов результаты теста не меняются

то есть pushad получается самым медленным.
а именно та портянка, которая используется сейчас в патчере - самая быстрая.


***

приведенный мной выше код моста я сократил и убрал перемещение значений esp и регистра флагов через кучу:

но как сделать перемещение адреса возврата не через кучу я не представляю,
кажется что сохранив функционал этого не сделать..

вобщем теперь переживать из-за размера моста можно будет меньше.

кстати в дампе патчера есть записи
bridge memory - это память выделенная патчером под все мосты.
bridges sizes sum - это суммарный размер всех мостов.
Berserker
09 Nov 2017, 22:23 patсher_x86
в патчере в мосте лоу-хука до сих пор портянка команд на сохранение каждого регистра
Для все той же обратной совместимости.
Более того, в коде моста много данных в регистр/стек попадают через кучу (временные переменные).
сейчаc код моста вот такой:


Порядок регистров, адреса возврата и регистра флагов здесь продиктован лишь обратной совместимостью.
Да, можно изменив порядок этого всего внутри HookContex сделать короче и красивее.
Но мне лично лень ломать голову как это сделать
я не ASM-нинзя, здесь скорее кто-то вроде MasterOfPuppets нужен.
Предложите ваше решение и я добавлю в патчер "NewFastLoHook" хук. а старый LoHook останется для обратной совместимости.

Но вообще от этой страшной медленной портянки никто, кроме тебя не страдает.
Да и начиная с версии 4 используя PatcherInstance::WriteAsmHook или Patcher::WriteAsmCode можно легко написать низкоуровневый хук точно и тонко самому определив код его моста.


Цитата
Имеется сейчас актуальный pas-файл для подключения патчера и ссылка на сам патчер последней версии?

актуального pas-файла нет, так как он уже несколько лет (!) никому не нужен.
можно использовать старый, но, очевидно, не будет доступен добавленный позднее функционал (например Asm-патчи и Asm-хуки)

Здесь последний патчер версии 4.2.8, хэдер для C++ версии 4.2 и pas-файл версии 2.1:
скачать патчер SDK
Berserker
17 Sep 2017, 22:09 patсher_x86
Цитата(AlexSpl @ 17 Sep 2017, 22:25) *
Цитата
Патчер - это инструмент для модификации любого исполняемого кода (не только героев).

Кто-нибудь может привести пример, как использовать патчер для моддинга других игр (например, Героев 2)?

Сейчас я в отпуске. Вернусь, покажу пример модинга героев 2. Я же начал делать ХД мод для двойки, но запнулся о локализацию, просто обломало ее делать. И работа дальше не пошла, хотя двойка (экзешник с сигнатурами) - благодатнейшая платформа для модинга.
AlexSpl, hippocamus, Orzie
05 Sep 2017, 04:39 Добавление функционала в HDmod
Цитата(the_new_pirate @ 04 Sep 2017, 21:27) *
Цитата(dimakey @ 04 Sep 2017, 13:46) *
А как? Может есть готовое решение, которое достаточно закинуть в папку?

не помню…
я доставал и засовывал обратно с помощью MMArchive, эта штука вроде только для windows и не знаю можно ли её использование скриптовать.
если просто положить файл отдельно, опять же не проверял, может и прокатило бы. сейчас лень повторять, решил что проще смириться с обычной графикой.


Так нужый батлфилд (bmp) и так достаточно закинуть в папку _HD3_Data\Common, раз уж обсуждение в теме ХД.
the_new_pirate, dimakey
27 Aug 2017, 17:43 Баг-репорты
Цитата(the_new_pirate @ 27 Aug 2017, 15:26) *
у меня установлен и выбран HW_rulez 1.40, но всё равно получается вот так.
в чём может быть проблема?

Установи Microsoft Visual C++ 2008 Redistributable Package:
https://www.microsoft.com/ru-ru/download/details.aspx?id=29
the_new_pirate
21 Aug 2017, 18:02 HD Флуд
Флуд и офф-топ высокого разрешения
Цитата(USBhere)
Лично для меня главной ненужной заморочкой является упор разработчиков ХоТА на эстетической красоте мода. Как то странновато тратить уйму времени на полировку пикселей и отладку теней, которые будут не заметны глазу 90% игроков.Геройщики ждут от мода более лояльный и гибкий функционал, который будет позволять человеку удовлетворить различные его потребности и насытить игру разнообразием (в том числе и рендомом), который бывает критичен при длительном "зависании" в Г3.

Чем еще заниматься людям, кторые (утрируя) умеют только пиксели полировать и отлаживать тени? Это художники должны новый функционал реализовывать? C помощью чего, фотошопа?
Вся разработка игры бОльшую часть самой важной и успешной истории в хоте держится на одном(!) человеке. Я в свое время помог с редактором карт, еще человек сейчас сделал редактор шаблонов. Но саму игру на 99,5% делает один человек.
hippocamus, Лентяй, XEPOMAHT, DrSlash
20 Aug 2017, 16:56 HD Флуд
Флуд и офф-топ высокого разрешения
Цитата(Slayer Moon)
Надеюсь, что уважаемый baratorch не забросит поддержку обычного SOD в угоду HOTA.

Вообще-то уже можно сказать забросил. С определенного момента я не делаю для Сод крупных и значимых фич, потому что Сод перестал быть мне интересен. Я уже писал на другом ресурсе, что люблю смотреть стримы и смотрю стримы исключительно только Хоты. Вообще в онлайне сода все крайне уныло: скелеты, утки, ангелы, масло, буст мувпоинтов, контроль, +алл, КШ. В хоте - совсем чуть чуть поразнообразнее. И это чуть-чуть - уже хорошо.

Цитата
Я не играю в ХОТУ потому, что это мод и как бы офигенен он ни был, он кардинально (местами) меняет основную игру

Для многих Хота слишком слабо меняет игру и поэтому ей они предпочитают моды к Эре, Моп.
Для меня лично тоже Хота слишком слабо меняет игру. Там же все то же самое, только либо "скины" новые, либо циферки незначительно в ту или другую сторону изменены. Мне же хочется больше новых механик в дополнение к существующим, которые бы сделали общую механику более глубокой и сложной. Вот например управляемый выстрел магогов и личей, неудача, - это позитивное для меня углубление и усложнение механики. Но подобных изменений в хоте очень мало. Подобные изменения крайне тяжело продавливать, ибо все разбивается об "неклассично" и "не вписывается в концепцию". Если же кардинальность относится к графике, то с одной стороны настоящему любителю игры в шахматы должно быть глубоко пофиг как выглядят и из чего сделаны фигуры. А с другой стороны, в хоте некоторые личности, отвечающие за графику просто маниакально относятся к вопросам стиля и качества картинки. Такого , по крайней мере, отношения к графики у художников NWC просто не могло быть, ибо никто из издателей не взялся бы за проект со сроком реализации в 10+ лет.
Есть конечно по части графики и упущения и недоработки, есть переработки, есть на мой взгляд бессмысленно потраченные силы (когда чинится то, что не ломалось), но в целом планка очень и очень высока.

hippocamus, IQUARE, Лорд Хаарт, J2K
19 Aug 2017, 00:59 HD Флуд
Флуд и офф-топ высокого разрешения
Цитата(BratetsVolk)
- что вам не нравится в Хоте?
- то-то и то-то

Вот. Это о том, о чем я говорил. NWC вас вообще ни очем не спрашивала и именно поэтому претензий к оригиналу нет, а не потому что он абсолютный идеал и нравится на 200% каждым своим кактусом.
Цитата
Почему команда разработчиков не верит в то, что кому-то в Хоте что-то может быть не интересно?

Да почему не верит то? Еще раз хота - комплексный продукт. Почему нвц не выпустила сборники и багфиксы отдельным модом к Возрождению? А-я-яй, не ужели нвц не верило что в Дыхании что-то может быть не интересно?
Зачем было городить эту жуткую графику в Трешке? Почему нельзя было сделать графику как в Двойке, а новую выпустить отдельным модом?
Цитата
Как по мне, команда Хоты должна для себя признать, что некоторые их решения по Героям 3 могут быть неинтересны, и тут нет ничего негативного. Всем не угодишь.

Да кто ж спорит то с тем что всем не угодишь. Просто, я например, умею смириться с тем что не интересно, закрыть на это глаза или привыкнуть, пересилив себя, чтобы насладиться тем, что интересно. В жизни приходится так делать постоянно. Если этого не уметь, то в жизни вообще ничего выбрать не сможешь. Потому что любой реальный сложный объект не может нравится каждой своей гранью на 200%.

А вообще, BratetsVolk, скажи конкретно, что именно тебя отвернуло от Хоты, и почему это заимело такое решающее значение?

Цитата(tmn)
Так я о том и пишу: Сопряжение навязали игрокам, которые этим фактом были весьма недовольны. И вы идёте тем же путём.

Более того (открою тайну) вам навязали Замок, Оплот, Башню и остальные. Почему не пойти тем же путем я не понимаю.

Цитата
Героям не нужны новые замки, чтобы оставаться интересной и популярной игрой.

Корректнее: Соду не нужны новые замки, чтобы оставаться Содом.
Ну так и у хоты нет задачи сделать новый аддон, который остался бы Содом. Надеюсь, всем очевидно, что такая задача была бы абсурдной.

Команда старается, пытается реализовать свой идеал. Багфиксы и правки баланса - необходимая часть этого идеала, как и новый контент. Почему команда должна напрягаться, чтобы удовлетворить хотелки того, кто не разделяет их представлений о идеале, того кто не может/не хочет оценить их труды комплексно?

Разбить комплексный продукт на независимые составляющие - это работа. Такой масштабный продукт - много работы. Кто эту работу будет оплачивать?
Желание того, чтобы именно твой продукт обладал максимальным количеством, недоступных для продуктов других производителей, положительных качеств - это совершенно естественное, обычное желание. Поэтому обвинять команду в том, что она чем-то там не делится - глупо.
hippocamus, J2K, samec, Axel_Templar, the_new_pirate, Lokos
18 Aug 2017, 11:13 HD Флуд
Флуд и офф-топ высокого разрешения
Объективно в Хоте нет чего-то такого что может резко отвернуть от нее человека, которому нравится сод.
Тут два варианта: либо для человека в принципе любое добавление неприемлемо портит сод, не важно багфикс это или новый кактус. Либо просто человек в случае с фанатским модом настроен изначально придирчиво и чувствует что есть/была возможность в моде сделать что-то не так, а вот так, как он хочет. И он бунтует из вредности. В случае с оригиналом такого рода ощущения уже кажутся абсурдными. Почему-то.
Shurup, hippocamus, IQUARE, Vade Parvis, J2K, DrSlash
18 Aug 2017, 07:37 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 53

+ теперь на время переподключения останавливается таймер
+ для игры вдвоем теперь ЧАТОМ ИГРЫ становится приват.
+ можно узнать рейтинг игрока, кликнув правой кнопкой мыши на имя в списке игроков.
+ в список шаблонов RMG добавлен шаблон 6LM-8MM mix
- выпилено ограничение на пользованиние лобби для иностранцев, т.е. на вход в лобби с английской хоты на не русской Windows.
+ оптимизации и исправления на сервере и клиенте.

! Для SoD ликвидирован функционал отладочной версии, случайно попавший в альфа-релиз, который автоматом подставлял пароли оппонента.
Новые запароленные сейвы не соместимы с предыдущими (скомпрометированными) версиями HoMM3 HD, и наоборот.
Шифрование сейвов изменено.

Эта альфа по реализованному функционалу уже максимально приблизилась к бета (а по стабильности к финальному релизу). Либо следующая версия либо через одну выйдет в публичный релиз с обновлением по воздуху.
Docent Picolan, hippocamus, magoth, Vade Parvis, Mefista, J2K, Sav, DrSlash, KypaToP_HM, USBhere, the_new_pirate, Lokos
07 Aug 2017, 09:19 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 50

+ реализован механизм автопереподключения при разрыве связи, который должен позволить комфортно играть со связью любого качества.
Если связь в целом хорошая, и лишь могут быть незначительные нестабильности, то игроки вообще не должны замечать что случаются разрывы-переподключения.

- исправлен баг оригинальной игры с бесконечным получением заголовков карт и бесконечным ожиданием оппонента после старта в сетевой игре.
Intofire, Docent Picolan, hippocamus, magoth, Vade Parvis, BlackBred, Mefista, J2K, Sav, Corkes, СЕРЁГА (JET), KypaToP_HM, the_new_pirate
26 Jul 2017, 13:29 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 48

- исправления ошибок клиента и сервера.
Mantiss, magoth, Mefista, J2K, Sav, Corkes, deferatto, KypaToP_HM, BratetsVolk
25 Jul 2017, 10:07 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 46

* исправления ошибок и оптимизация клиента и сервера.
+ в окне лобби доступна кнопка РЕЙТИНГ (открывает список всех игроков с информацией: место, имя, рейтинг, игры, победы, поражения, ничьи)
Seiffear, hippocamus, magoth, Mefista, J2K, Sav, Corkes, Cthulhu_55, KypaToP_HM, Lokos
19 Jul 2017, 15:05 Лобби-сервер для HotA
обсуждение разработки
Теперь вместо плагина HotA HW 1.38+ следует использовать HW_rules_1.40
Seiffear, magoth, Mefista, J2K, XMenik, Sav, Corkes, Cthulhu_55, KypaToP_HM
19 Jul 2017, 13:32 Лобби-сервер для HotA
обсуждение разработки
Seiffear, hippocamus, magoth, Mefista, XMenik, Sav, Corkes, Cthulhu_55, KypaToP_HM
18 Jul 2017, 13:34 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 41

- исправлен баг, делавший невозможной игру с одновременным ходом для 3 и более человек.
* оптимизация и исправления ошибок сервера.
Seiffear, Docent Picolan, magoth, Vade Parvis, Mefista, XMenik, Sav, Corkes, deferatto, DrSlash, Cthulhu_55, KypaToP_HM
17 Jul 2017, 12:28 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 33

* небольшие оптимизация и исправление ошибок сервера.
+ теперь по клику правой кнопкой мыши на игру, в информации о ней перечислены все ее участники.
Seiffear, hippocamus, magoth, Vade Parvis, AKuHAK, Mefista, XMenik, Sav, igrik, Corkes, deferatto, Cthulhu_55, KypaToP_HM, BratetsVolk
16 Jul 2017, 20:58 Лобби-сервер для HotA
обсуждение разработки
по той же ссылке доступен оффлайн апдейт до alpha 31

+ (убогая, но хоть какая-то) поддержка ссылок в чате.

в полее ввода текста:
+ позиционирование курсора мышью
+ поддержка вставки русского текста по [CTRL]+[V]
+ сочетания клавиш [CTRL]+[<-], [CTRL]+[->] и [CTRL]+[BACKSPACE]

Seiffear, hippocamus, magoth, Nestor, Vade Parvis, Mefista, J2K, XMenik, Sav, igrik, Corkes, DrSlash, Cthulhu_55, KypaToP_HM

25 страниц V   1 2 3 > » 
Текстовая версия Сейчас: 22 November 2017 - 10:22
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика