IPB

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

23 страниц V  « < 20 21 22 23 >  
Reply to this topicStart new topic
> Обсуждение инженерного анализа
Berserker
сообщение 12 Jul 2019, 22:04
Сообщение #421

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




А почему на этом месте не освоить Erm Hooker 2.0?


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
XEPOMAHT
сообщение 13 Jul 2019, 00:26
Сообщение #422

---------------------- New_Life_of_Heroes ----------------------
Сообщений: 280
Спасибо сказали: 408 раз




Цитата(Richter @ 12 Jul 2019, 12:02) *
!!UN:Cy1/5/?"G" - Попытка воткнуть команду JMP 4787854 (адрес для примера) в начало (в данном случае) массива, для этого и нужно правильно вычислить число (скрин ниже)


Пихать куда-то байткод через ERM - очень неудачное решение для применения ERM. Намного более разумным шагом будет создание собственной dll средствами бесплатного FASM например.

Либо использовать статичное адресное пространство (если нужны дозы БДСМ-байткодинга, пусть и на ERM), которое всегда можно найти, было бы желание:

1. Можно патчить код, выделяющий и очищающий память под основные игровые массивы данных. Через ERM всегда можно прочитать базовый адрес и что-то записать и прочитать за игровыми данными, под которые будет выделена память "сверх нормы". Патчить, естественно, в exe, через dll или bin. Ну а читать и записывать можно через ERM.
2. Можно записывать код в огромное количество NOPS, располагающихся между функциями (если мало, то можно оптимизировать окончания функций - многие имеют повторяющиеся элементы - для кода ставятся прыжки с повторов на один единый участок, для данных кейсов - изменяются их адреса в самих функциях) (если и этого мало, то можно двигать сами функции, расширяя таким образом NOPS, но это уже совсем для каких-то маняков).
3. Можно оптимизировать сами геройские функции, освобождая пространство - вынос повторяющихся линейных участков функций в отдельные функции с установкой их вызовов (будет работать немного медленнее, но зато освободится куча пространства), снижение размера самого кода - использование более коротких, но более затратных для ЦП, команд, например, хорошие результаты даёт добавление прямой команды умножения вместо оптимизационной колбасы из имитации умножения (так же будет работать немного медленнее, но зато освободится куча пространства), а воговский код в exe достаточно топорно собран и без особых проблем ужимается раза вчетверть где-то.

Но.... есть одно но: все эти "процессы" отнимут огромное количество времени - Richter, твой мод выйдет намного намного намного намного быстрее, если всё делать по-человечески через DLL, а не через ж.пу.


--------------------
WoG + MoP + HoA + Forge + Bastion = ERA+


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
hippocamus
сообщение 13 Jul 2019, 01:46
Сообщение #423

допустим, мяў
Сообщений: 24 129
Спасибо сказали: 13439 раз




Цитата(XEPOMAHT @ 13 Jul 2019, 00:26) *
Пихать куда-то байткод через ERM - очень неудачное решение для применения ERM. Намного более разумным шагом будет создание собственной dll средствами бесплатного FASM например.
Смотря какой код. Если нужно тупо что-то занопить, чтобы не мешало - самое оно. Или что-то поправить в самой инициализации игры. А вот функции, разумеется, лучше использовать нативные, либо писать свои.


--------------------
Вокруг столько фильмов, книг, музыки - а природа какая невероятная!
Если тебе скучно жить - ты совсем дурак. (Татьяна Черниговская)
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 13 Jul 2019, 02:11 (Сообщение отредактировал Richter - 13 Jul 2019, 08:15)
Сообщение #424

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата(MasterOfPuppets @ 12 Jul 2019, 14:30) *
Занести адрес массива в какую-нибудь глобальную переменную, а прыжок исправить на jmp [переменная].
Или не?
Вообще, вроде в ЭРЕ давно есть способы вставки хука, а тебе он и нужен, как я понял.

Неплохая идея. Правда не до конца представляю как это сделать, что бы работало. Спасибо.

Цитата(tolich @ 12 Jul 2019, 16:49) *
0777A02D - 777A0013 = 8FFDA01A
(байты в команде в обратном порядке, потому что intel)

Точно! Блин как я забыл это в расчет взять. А то какие то триллионные значения получались. Спасибо.

Цитата(igrik @ 12 Jul 2019, 17:37) *
Это не самая большая проблема.
Насущный вопрос: как вернуться таким способом назад, в исходное место?
Эровский числовой массив состоит из интов, а чтобы записать команду JMP нужен байт. Можно конечно запилить сначала 3 нопа, а потом JMP и адрес прыжка назад (который тоже еще нужно высчитать!), но как по мне всё это еще тот гемор. Это нужно вычислить адрес переменной массива, которая будет указывать на обратный адрес, потом через UN:C по этому адресу записать нопы и опткод джампа, в следующей перменной массива нужно указать высчитанное смещение назад и правильно его записать обратно в массив, смещение к тому же будет зависеть от длинны массива. В во всём этом винигрете нужно еще не запороть регистры. Ахтунг, одним словом...

И что это за такая интересная команда?!
Код
!!UN:Cy1/5/?"G"

Во первых: UN:C поддерживает только 1, 2 или 4 байта для патчинга.
Во вторых: ?"G" - WTF?!

И еще: не забываем про точки с запятой...

Хорошо и правильно объяснили. Пытался пробовать. Это просто капец. Вообщем пришёл к выводу, что сделать даже часть задуманного через !!SN:M, нужны железобетонные нервы.
Команды !!UN:Cy1/5/?"G" не существует, это эмоциональная составляющая). А точки с запятой, это, да. Спасибо.

Цитата(feanor @ 12 Jul 2019, 21:58) *
Не джампьте в память, пацаны, вы матерям еще нужны

а если все-таки ннадо, то делайте примерно так...

если свободных регистров нет, а их обычно нет, то можно в стек засунуть, а в конце своего кода высунуть

А вообще именно на этом месте надо все-таки осваивать плагины

Про регистры не понял, знаний нет. А плагины потихоньку стараюсь. Спасибо.

Цитата(Berserker @ 13 Jul 2019, 00:04) *
А почему на этом месте не освоить Erm Hooker 2.0?

Это дело. Erm Hooker это просто класс, отдельная бладарность тому кто это сделал, уже использую его правда методом тыка, однако получается. Спасибо. И отдельное Спасибо Вам за создание платформы ERA!

Цитата(XEPOMAHT @ 13 Jul 2019, 02:26) *
Пихать куда-то байткод через ERM - очень неудачное решение для применения ERM. Намного более разумным шагом будет создание собственной dll средствами бесплатного FASM например.

Либо использовать статичное адресное пространство (если нужны дозы БДСМ-байткодинга, пусть и на ERM), которое всегда можно найти, было бы желание:

1. Можно патчить код, выделяющий и очищающий память под основные игровые массивы данных. Через ERM всегда можно прочитать базовый адрес и что-то записать и прочитать за игровыми данными, под которые будет выделена память "сверх нормы". Патчить, естественно, в exe, через dll или bin. Ну а читать и записывать можно через ERM.
2. Можно записывать код в огромное количество NOPS, располагающихся между функциями (если мало, то можно оптимизировать окончания функций - многие имеют повторяющиеся элементы - для кода ставятся прыжки с повторов на один единый участок, для данных кейсов - изменяются их адреса в самих функциях) (если и этого мало, то можно двигать сами функции, расширяя таким образом NOPS, но это уже совсем для каких-то маняков).
3. Можно оптимизировать сами геройские функции, освобождая пространство - вынос повторяющихся линейных участков функций в отдельные функции с установкой их вызовов (будет работать немного медленнее, но зато освободится куча пространства), снижение размера самого кода - использование более коротких, но более затратных для ЦП, команд, например, хорошие результаты даёт добавление прямой команды умножения вместо оптимизационной колбасы из имитации умножения (так же будет работать немного медленнее, но зато освободится куча пространства), а воговский код в exe достаточно топорно собран и без особых проблем ужимается раза вчетверть где-то.

Но.... есть одно но: все эти "процессы" отнимут огромное количество времени - Richter, твой мод выйдет намного намного намного намного быстрее, если всё делать по-человечески через DLL, а не через ж.пу.

А вот так на данный момент и действую, вроде получается, времени требует много, чтобы не порушить код.
Динамические библиотеки вообще не знаю с чего начать. Искал видео на ютубе, непонятно нифига. Вообщем как не умел, так и не умею. Как бы то нибыло мод будет закончен. Было бы здоровье как говорится.
Спасибо.
Может кто нибудь сможет написать пустую DLL со статическими адресами для использования?


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 13 Jul 2019, 10:36
Сообщение #425

😸🧡✊✌️
Сообщений: 16 495
Спасибо сказали: 3401 раз




Цитата(feanor @ 12 Jul 2019, 19:58) *
если свободных регистров нет, а их обычно нет

Код
push 71231312h
ret


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 13 Jul 2019, 13:52
Сообщение #426

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




push/ret портит предсказание процессора по переходам, mov reg32, value, jmp reg32 лучше.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 13 Jul 2019, 13:59
Сообщение #427

😸🧡✊✌️
Сообщений: 16 495
Спасибо сказали: 3401 раз




Не понимаю, чему тут портиться: если пренебречь ситуациями вроде переполнения стека, переход предсказуем, как чаепитие в Англии в 17:00.
И, да: jmp value чемпион.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post
Etoprostoya
сообщение 13 Jul 2019, 17:13
Сообщение #428

Etoslozhnostatus
Сообщений: 8 676
Спасибо сказали: 16200 раз




Да и в большинстве случаев производительность не нужна.
Ещё можно сохранять регистры в регистрах с плавающей запятой FPU. Насчёт регистров SSE не уверен, но вроде MoP с ними работал.


--------------------
- Да ну!?
- Horn of the Argali гну!
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 13 Jul 2019, 17:37
Сообщение #429

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




Цитата(Berserker @ 13 Jul 2019, 14:52) *
push/ret портит предсказание процессора по переходам, mov reg32, value, jmp reg32 лучше.

В каком случае это критично?
А то в WERD вся библиотека игровых функций на пуш-ретах.
Цитата
Насчёт регистров SSE не уверен, но вроде MoP с ними работал.

Использовал для вычислений с плавающей запятой и для хранения и копирования 8- и 16-байтных массивов. Сохранять в них регистры процессора? Не, только push и pushad, да и то по допустимому минимуму.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery

Go to the top of the pageAdd Nick
 
+Quote Post
XEPOMAHT
сообщение 14 Jul 2019, 00:01
Сообщение #430

---------------------- New_Life_of_Heroes ----------------------
Сообщений: 280
Спасибо сказали: 408 раз




Цитата(Richter @ 13 Jul 2019, 10:34) *
1 параметр - указатель на структуру героя,
2 параметр - цвет флага
3 параметр - указатель на структуру войск гарнизона (7 DWORDов для типов, 7 DWORDов для количества (или наоборот (= ) и 8 байт непонятного назначения)"


1. Получить структуру нужного тебе героя: получить адрес базовой структуры и прибавить к ней расчётное смещение до структуры по номеру героя.
2. Это наверное разъяснять не надо - и так понятно.
3. Получить структуру гарнизона в игре (если гарнизоны присутствуют на карте):

struct _Garrison_
Byte Хозяин
db ?
db ?
db ?
Dword Слот_1_тип_существа
Dword Слот_2_тип_существа
Dword Слот_3_тип_существа
Dword Слот_4_тип_существа
Dword Слот_5_тип_существа
Dword Слот_6_тип_существа
Dword Слот_7_тип_существа
Dword Слот_1_количество_существ
Dword Слот_2_количество_существ
Dword Слот_3_количество_существ
Dword Слот_4_количество_существ
Dword Слот_5_количество_существ
Dword Слот_6_количество_существ
Dword Слот_7_количество_существ
Byte Возможность_удаления_охраны; 0 - нельзя, 1 - можно
Byte X
Byte Y
Byte L
ends

Получать структуру гарнизона можно воговской функцией:

mov ebx,BASE
mov ebx,[ebx]
add ebx,0x4E3AC // -> табл.настр
mov eax,[ebx]
mov zret,eax


--------------------
WoG + MoP + HoA + Forge + Bastion = ERA+


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 14 Jul 2019, 00:31
Сообщение #431

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




https://stackoverflow.com/questions/1546141...ddress-op-codes
push/ret will unbalance the return-address predictor stack. mov eax,addr / jmp eax is only 1 byte longer and doesn't have that problem. See also Call an absolute pointer in x86 machine code.

Предсказание переходов работает с чётными парами call..ret. Непарные ret его нарушают, что определённо влияет на производительность в худшую сторону. Но с учётом всего навороченного в игре и требований это может быть абсолютно незаметно.


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 14 Jul 2019, 22:20
Сообщение #432

😸🧡✊✌️
Сообщений: 16 495
Спасибо сказали: 3401 раз




Цитата(Berserker @ 14 Jul 2019, 22:01) *
Формат файлов кампаний:
Heroes 3 Campaign (h3c) format after unpacking (gz).

h3c - gzip - архив, состоящий из нескольких частей, каждая со своим gzip-заголовком.
Каждая карта находится в отдельной части. Заголовок и список зон — в первой части.
При распаковке все части распаковываются в один непрерывный файл. Не надо так.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Berserker
сообщение 14 Jul 2019, 23:41
Сообщение #433

Immortal
Сообщений: 1 468
Спасибо сказали: 1153 раза




С целью парсинга и извлечения можно распаковывать в один. Запаковывать обратно нужно в указанном тобой виде, согласен.


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 30 Jul 2019, 19:47
Сообщение #434

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Решился заняться созданием dll

Как ни смешно, дальше двинуться не получается
Может у кого нибудь есть желание обсудить эту тему)

Как дальше на FASM создать dll, скажем начать выполнение с адреса 4E3287h
далее код....... потом чтобы программа дальше продолжала работать.
Может немного не грамотно обрисовал. Надеюсь понятно)


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
UnSchtalch
сообщение 30 Jul 2019, 21:56
Сообщение #435

Silent One
Сообщений: 91
Спасибо сказали: 56 раз




Цитата(Richter @ 30 Jul 2019, 21:47) *
Решился заняться созданием dl
.....
Как дальше на FASM создать dll, скажем начать выполнение с адреса 4E3287h
далее код....... потом чтобы программа дальше продолжала работать.
Может немного не грамотно обрисовал. Надеюсь понятно)


Философский вопрос -- тулчейн того же mingw по каким-то внешним причинам нельзя?

Сгенерировать из .asm .o а их уже линковать через ld.exe?


--------------------
All this moments will be lost in time...


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
Richter
сообщение 31 Jul 2019, 00:39
Сообщение #436

collector of time
Сообщений: 159
Спасибо сказали: 73 раза




Цитата(UnSchtalch @ 30 Jul 2019, 23:56) *
Философский вопрос -- тулчейн того же mingw по каким-то внешним причинам нельзя?
Сгенерировать из .asm .o а их уже линковать через ld.exe?

Благодарю за ответ на мой пост, но то что вы написали. Непонятно мне вообще)


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
igrik
сообщение 31 Jul 2019, 07:53 (Сообщение отредактировал igrik - 31 Jul 2019, 07:58)
Сообщение #437

Immortal
Сообщений: 589
Спасибо сказали: 891 раз




Цитата(Richter @ 30 Jul 2019, 19:47) *
Решился заняться созданием dll
Как ни смешно, дальше двинуться не получается
Может у кого нибудь есть желание обсудить эту тему)

Как дальше на FASM создать dll, скажем начать выполнение с адреса 4E3287h
далее код....... потом чтобы программа дальше продолжала работать.
Может немного не грамотно обрисовал. Надеюсь понятно)
А С++ не?
По С++ вот тема (link), вот тема (link)

Код
int __stdcall LoHook_Name(LoHook* h, HookContext* c)
{
    /*
    *
    * тут пишем необходимый нам код код
    *
    */


    return EXEC_DEFAULT; // вернуться в код игры
}


// начать выполнение с адреса 4E3287h
// означает поставить хук на адрес 0x4E3287h
// итого: ставим хук с названием LoHook_Name
_PI->WriteLoHook(0x4E3287, LoHook_Name);


--------------------


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
UnSchtalch
сообщение 31 Jul 2019, 09:46
Сообщение #438

Silent One
Сообщений: 91
Спасибо сказали: 56 раз




Цитата(Richter @ 31 Jul 2019, 02:39) *
Цитата(UnSchtalch @ 30 Jul 2019, 23:56) *
Философский вопрос -- тулчейн того же mingw по каким-то внешним причинам нельзя?
Сгенерировать из .asm .o а их уже линковать через ld.exe?

Благодарю за ответ на мой пост, но то что вы написали. Непонятно мне вообще)



Перевожу на русский:
В fasm можно сделать format binary . Получить так называемый объектный файл.

Есть набор утилит MinGW, который включает в себя в том числе линковщик, который позволяет собрать из объектников в том числе и dll.
Документация есть тут . Помимо этого может пригодиться вот этот раздел . Там описана специфика под винду.

P.S.
А все же, зачем на голом asm? Компиляторы того же С давно дают сравнимый и превосходящий по скорости код. А возни на порядок меньше


--------------------
All this moments will be lost in time...


Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
MasterOfPuppets
сообщение 31 Jul 2019, 12:43 (Сообщение отредактировал MasterOfPuppets - 31 Jul 2019, 12:47)
Сообщение #439

Анти-Всë
Сообщений: 2 989
Спасибо сказали: 2377 раз




В fasm можно сделать и dll, и exe, и ещё кучу форматов без сторонних компоновщиков.
Как делать? Читайте документацию, изучайте примеры.
Небольшая популяризация фасма в геройском моддинге связана, видимо, с моими в нём скромными успехами. Но я просто выбрал инструмент, который мне нравится, а не лучший для всех.


--------------------
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery



Спасибо сказали:
Go to the top of the pageAdd Nick
 
+Quote Post
tolich
сообщение 31 Jul 2019, 13:13
Сообщение #440

😸🧡✊✌️
Сообщений: 16 495
Спасибо сказали: 3401 раз




В fasm не сделать батник.


--------------------
Я слежу за тобой!
* tolic.narod.ru

Цитата
Всегда приятно осознавать, что кто-то делает что-то хуже, чем делал бы ты, если бы умел.
Борис "Бонус" Репетур, "От винта!", выпуск 38.
Go to the top of the pageAdd Nick
 
+Quote Post

23 страниц V  « < 20 21 22 23 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20 December 2025 - 12:28
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика