Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обсуждение инженерного анализа
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
pHOMM
Тема возникает с завидной частотой... я уже выкладывал на дф2 сие дело, вот http://forum.df2.ru/index.php?showtopic=15981 Проект по поддержке карт с размерами выше 144
tolich
А гиппо и XS делал. smile.gif
hippocamus
Цитата(Сулейман @ 04 Jun 2011, 14:52) *
Тогда может, там можно создавать создавать более чем двухуровневые карты? И задавать размер вручную, больше чем XL к примеру?

Цитата(feanor @ 04 Jun 2011, 15:01) *
Нельзя.
Можно, но надо руками патчить редактор.

Нельзя. Я сделал 4-уровневую карту, она вызывает критическую ошибку. major пробовал разобраться, говорит, что получается выход за пределы массива. Т.е. байт #10 в заголовке карты имеет не тип SmallInt или Byte (количество слоёв), а тип Boolean (двуслойная ли карта?). Это, конечно можно исправить, но нужно, чтобы заинтересовался вопросом один из кодеров ...
Цитата(tolich @ 05 Jun 2011, 22:38) *
А гиппо и XS делал. smile.gif

Ага, 18х18. smile.gif
Haart of the Abyss
Цитата(hippocamus @ 06 Jun 2011, 01:02) *
Цитата(Сулейман @ 04 Jun 2011, 14:52) *
Тогда может, там можно создавать создавать более чем двухуровневые карты? И задавать размер вручную, больше чем XL к примеру?

Цитата(feanor @ 04 Jun 2011, 15:01) *
Нельзя.
Можно, но надо руками патчить редактор.

Нельзя. Я сделал 4-уровневую карту

Если что, первое и втолое предложение в посте Феанора относились к первому и второму предложению в посте Сулеймана соответственно. Так что многоуровневые — да, нельзя.
feanor
spiteful.gifО кастомных спеллбуках, молитвах Кришне и подделках под содовские артефакты.
Etoprostoya
И что этот монстр-код делает?
feanor
Возносит хвалу всем индийским богам одним своим наличием.

А так - можно книжки магии сделать свои для каждой ГМ. Можно поуправлять возможностью полета/хождения по воде для героя.

Да, я там ошибся - щас исправил.
tolich
3/2 бита: сделай табличку, в которой перечисли все хуки и ставь их циклом. А то у меня lich-но мурашки по телу от такого.
:ant:
feanor
Цитата
сделай табличку, в которой перечисли все хуки и ставь их циклом.

ой, я программку, которой генерил этот ужас, куда-то продевал. А без средств автоматизации я это трогать не хочу.

Чорт, в качестве средства автоматизации выступил обыкновенный блокнот.
Axolotl
Не знаю, писалось об этом уже или нет, но обнаружил тут одну необычную вещь с Мана Вортексом.

Долго мучался в попытках понять, почему вылетает игра при замене Дефа мана вортекса в Дэнжене...
Потом, посмотрев на деф этого самого вортекса (20 кадров), понял, что он имеет два цикла анимации - первые 10 кадров - без гильдии 5-го уровня, следующие - 10 кадров, соответственно с гильдией.
В адресе, где указывается кол-во кадров дефа - стоит 20 кадров. Видимо, где-то про него еще отдельно прописано, какие именно из кадров в данный момент нужно циклить. Может будет полезной инфа, и это можно как-то использовать.
Etoprostoya
В принципе, возможно увеличить число типов палаток ключников и, заодно, стражей границ с пограничными воротами? Скажем, вдвое, что для очень больших карт (>144) было бы полезно. Как на это будет реагировать AI?
Etoprostoya
В дополнение к вопросу о палатках и стражах, тот же вопрос, но о дополнительных монолитах. Можно добавить новые монолиты?



P.S. Графика Валери.
feanor
Цитата
Можно добавить новые монолиты?

А просто выставить новые подтипы не канает?
У меня вроде работает.
tolich
А вот палатки, кажется, нельзя. sad.gif
feanor
Палатки нельзя. Под палатки отведен всего один байт в структуре игрока.
Vizit0r
дык палаток заметно меньше 256 (255, если быть точным smile.gif)
feanor
В современном байте таки всего 8 бит.
Vizit0r
а, я про другое думал.
Valery
Does not work, additional subtypes after 8. Will have to script manually each one.
Sadness
Привет, ребят. Нужна помощь по реверсингу.
В общем-то я уже писал на этот счёт тему, но никто не отозвался
пруф
http://forum.df2.ru/index.php?showtopic=27998

Собственно там есть немного почитать, а я перейду к сути:

Охрана проходов, а так же всевозможных объектов задаётся параметром Value, который в свою очередь берётся из двух текстовиков:
Для случайных карт это rmg.txt, для объектов - crtraits.txt. Проходы задаются в rmg.txt вручную, устанавливается некоторое значение в value. Далее (видимо?) производится запрос в crtraits на предмет value монстра, тот выбирается случайно. Допустим, выпали архангелы. Их value - 8776. Таким образом проход на песок на джебусе (45000) будет выражаться следующим образом: 45000 = 8776*N*K,
где N - количество существ, K - некоторый коэффициент. Согласно Wic-у, который писал статью (ссылка в ссылке выше), 1/K для ГО лежит в интервале 2-3. Ощутимая разница, согласитесь, от 10 до 15 архангелов. Так вот, чтобы подобные охраны прикидывать не "на глаз", я просил помочь раздобыть этот K. Судя по тому, как он разнится, у него всё-таки имеется собственная зависимость от Value. Я могу ошибаться, то на rnd - не похоже, я бы сказал - это 99% не случайный коэффициент.

Так вот, я предполагаю, что где-то в коде есть адрес, на котором можно поставить брейкпоинт, и при отладке мы получим требуемую строку. Вероятнее всего, перед созданием рандомной карты, игра будет обращаться к crtraits.txt, за значением Value. Вот, сейчас сижу и пытаюсь найти строку с этим ctraits, но получается плохо.
Выручайте, на самом деле, для онлайна это будет существенный прорыв. :-)

Upd. 4:42 msk

Кое-что нашёл. Я решил поискать rmg.txt и, собственно, нашёл.
Обращение к самому текстовику идёт по адресу 682854, наиболее вероятно - берётся название шаблона, поскольку далее проглядывается текст, который используется в качестве описания рандомной карты.
seed was %i, size %i, levels %i, humans %i, computers %i, water
по тому же адресу (6828bc) и тёг monsters %i, в общем-то предмет всей ботвы.

Едем дальше.
.data:00682F08 aH3pbitma_lod db 'h3pbitma.lod',0
.data:00682F48 aH3bitmap_lod db 'h3bitmap.lod',0

первое - вообще не пойму что, а второе - надеюсь, то, что ищу (т.к. текстовик crtraits находится именно в этом лоде)

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

Upd. 4:57 msk
Нифига не получилось, брейкпоинт срабатывает до того, как я запускаю игру. Ну а, вообще, как я иначе хотел, без этого лода игра-то и не запустится, много в ней информации.
И всё жеж таки, как мне поставить брейкпоинт именно в начало генерации новой карты?

Upd. 8:59 msk
Тестирование шаблона с фикисрованными охранами в 3000 value и ограничением существ на равных значениях (то бишь коэффициент будет множиться на константу, на примере копейщиков: low - 30, high - 30, сделано путём редактирования crtraits.txt) показало, что всё-таки есть определённая доля рандома, поскольку полученые численные значения нейтралов разнились довольно сильно. Более того, коэффициент у Wic-а какой-то не правильный. Там ни разу не встречался коэффициент 1, всегда были значения возле 2-3. Так-то... но, правда, здесь выходит рандом на рандоме: с одной стороны рандомный коэффициент, с другой rnd [low;high] для каждого из существ. Так что даже на глаз определить с точностью до 2-3 единиц - не получится. Но отличить проход 3000 от 6000 - не составит труда. Правда, это всем давно известно. Эх, не быть мне Колумбом. :-)
feanor
Собственно, инженерный анализ еще интересен кому?

А то в теме все заглохло, потому что заинтересованные в написании туда пстов люди получили на лапы сорцы вога, воговскую же ида-базу (ну и декомпиленные из нее сорцы героев, да), а много кто - и сорцы разного другого прочего, после чего реверсить стало не с фиг чего.
totkotoriy
Так, наверное, и плавнее её можно будет сделать. Было бы очень хорошо.
А то я как-то хотел сделать плавнее анимацию воды и наткнулся на вот это.
Docent Picolan
Цитата(totkotoriy @ 18 Jan 2013, 23:49) *
Так, наверное, и плавнее её можно будет сделать. Было бы очень хорошо.
А то я как-то хотел сделать плавнее анимацию воды и наткнулся на вот это.

обсуждения - в этой теме
totkotoriy
Цитата(Docent Picolan @ 18 Jan 2013, 23:52) *
Цитата(totkotoriy @ 18 Jan 2013, 23:49) *
Так, наверное, и плавнее её можно будет сделать. Было бы очень хорошо.
А то я как-то хотел сделать плавнее анимацию воды и наткнулся на вот это.

обсуждения - в этой теме

Я как понял только для меня)))

С чем категорически несогласен.
Docent Picolan
Цитата(totkotoriy @ 18 Jan 2013, 23:55) *
Я как понял только для меня)))

да вроде в той теме оффтоп весь вырезан. только нужные посты
totkotoriy
Цитата(Docent Picolan @ 18 Jan 2013, 23:56) *
Цитата(totkotoriy @ 18 Jan 2013, 23:55) *
Я как понял только для меня)))

да вроде в той теме оффтоп весь вырезан. только нужные посты

Вот и я про тоже. Я вроде по делу сказал.... ну да ладно... хозяин - барин.
feanor
Цитата
Я вроде по делу сказал....

По делу - это когда с адресами-паролями-кодом.
Docent Picolan
Цитата(totkotoriy @ 18 Jan 2013, 23:58) *
Я вроде по делу сказал....

ну и замечательно что по делу. как раз отличный повод для поста в теме с обсуждением
там-то - фрагменты кода)
totkotoriy
Ну вас двоих я то точно не переспорю.

Так можно будет сделать плавнее анимацию?
hippocamus
Хороший способ. У меня была подборка картинок tif по этой схеме/
Не радует отсутствие унификации - цвета из середины палитры, для каждого дефа свои...
feanor
Цитата
Так можно будет сделать плавнее анимацию?

Сожно (ошибку исправь сам, угу)

Бинарной правкой не обойдешься, надо свою реализацию DevicePalette_RotateColors писать (она кстати, используется еще и для мерцающего цвета обводок существа в битве)
hippocamus
Не, так резать - не пойдёт. Мой пост непонятно к чему. Если уж переносить - то со ссылкой на пост, на который был ответ...
Docent Picolan
Цитата(hippocamus @ 19 Jan 2013, 01:30) *
Не, так резать - не пойдёт. Мой пост непонятно к чему. Если уж переносить - то со ссылкой на пост, на который был ответ...

ну так я уже второй пост переношу)

странно вы с totkotor-ым не обращаете внимание что обсуждение анализа отродясь велось в отдельной теме. так и называющейся) раньше, как-то, проблем с этим не возникало, народ сразу писал куда надо)
feanor
Кстати, на машинах с аптаймом от 24,86 до 49,71 дней (а так же 24,86+49,71*n; 49,71*(n+1)) анимация почв и рек (и, возможно, еще что-то) работать не будет.
hippocamus
Вот это прикол. Почему? У меня правда реДко бывает больше 2 недель, но мало ли...
feanor
Цитата
Вот это прикол. Почему?

Да ваще.
Потому что для отсчета кадра анимации используется timeGetTime, которая возвращает uint секунд со старта винды.

А потом:
Код
    if ( timeGetTime() - NextPaletteRotate >= 0 )
    {
      if ( dword_00698A68 == 1 || dword_00698A68 == 3 )
        v1 = timeGetTime() + 110;
      else
        v1 = timeGetTime() + 200;
      NextPaletteRotate = v1;
..крутим палитры
}


И если timeGetTime() возвращает более чем 0x7FFFFFFF секунд, то: NextPaletteRotate при старте равно нулю; timeGetTime() - NextPaletteRotate = timeGetTime() < 0; крутилка палитр не выполняется; в NextPaletteRotate так и сидит ноль. Смыть, повторить.

Мораль - инициализируйте переменные ©
hippocamus
Ну, исправь. И дай это исправление Саву и Бараторчу. Это же явно - баг. Хотя - труднонаблюдаемый и малопонятный. Тем больший респект тебе!
Это вполне реально - компу работать больше 25 суток. С тем же hibernate особенно. У меня по полгода в XP работал. Это семёрка нудить начинает - "перегрузите!"
Throutle
Незнаю-незнаю, у меня как раз на семёрке аптайм капитально вырос, а ХП постоянно ребутал...
tolich
Цитата(feanor @ 05 Apr 2013, 23:32) *
Все забываю.
https://dl.dropbox.com/u/61759222/HoMM/Heroes3f.c
Декомпилировано по воговской idb-базе.

Код
sprintf(TextBuffer, "Heroes of Might and Magic III is already running.", "Heroes of Might and Magic III");
Пичалька.
igrik
Цитата
Еще об артефактах, точнее, о расчете их (и не только их) бонусов.

004E3ED0 - функция, возвращающая тип поднимаемого в результате некромантии существа.
004E3F40 - функция, определяющая процент поднятых существ
004E42E0 - функция, определяющая радиус обзора.
004E43D0 - функция, определяющая проценты бонуса Archery
004E4690 - ..Eagle Eye
004E4950 - ..Resistance
004E4C00 - расчет мувпойнтов.
004E5020 - бонус к длительности заклятий
004E59D0 - бонусы к школам магии.
004E5D10 - бонусы к скорости в бою
004E5DF0 - к хитпойнтам


Жаль не указан бонус к пополнению маны...
feanor
//----- (004E41B0) --------------------------------------------------------
int __thiscall GetDailyManaRestorePoints(HERO* this)
igrik
Код
**первый параметр - combatmanager
!!UN:C6919200/4/?y10;
**второй параметр - указатель на массив из сорока байт: по одному на отряд. За массив возьмем y20-y29.
!!VRy20:S1 +256*1; --первые два отряда у себя
!!VRy25:S1; --первый отряд у противника
**третий параметр - номер анимации (5 - анимация)
**четвертый параметр - нужно ли анимировать урон (0 - не надо, 1 - надо)
!!SN:E5925584/2/y10/?y20/5/1;


feanor, как анимировать не только первые 2 отряда?
feanor
!!VRy20:S1 +256 +65536 +16777216; --0-4
!!VRy21:S1 +256 +65536 +16777216; --5-8
..
gamecreator
Цитата(feanor @ 11 May 2014, 22:33) *
!!VRy20:S1 +256 +65536 +16777216; --0-4
А не 0-3 ли? И что происходит с 20-м и 41-м отрядами? Их нельзя анимировать?
Richter
Как узнать, за что какая функция отвечает, как её "отловить", применить и прочее.
Например: При посещении сокровищницы, диалог c кнопками "да" или "нет", как его отключить, вызвать, управлять и всё тому подобное.
Algor
Чем-то ты мне раннего МоР'а напоминаешь, парень. К нему бы тебе обратиться, но он тут гость не частый (ну или анонимно-молчаливый, хз).
Ангел
Очень хорошо, когда в людях азарт проявляется и интерес к моддингу игры, и вообще к игре. Мы взрослеем, а радость то должна оставаться? А Радость героев с нами уже 15 лет почти
feanor
Вообще, где-то тут уже был тред "Обсуждение инженерного анализа", ну да фиг с ним
В данном случае проще будет заблокировать вывод окна же
Richter
Цитата(feanor @ 16 Jan 2015, 23:36) *
Вообще, где-то тут уже был тред "Обсуждение инженерного анализа", ну да фиг с ним
В данном случае проще будет заблокировать вывод окна же

Для меня такое проще сказать, чем сделать. Через IDA в свободное время копаю. Правда не программист я, поэтому с "нуля" приходится думать. В ERA хорошо вроде реализовано это через !!SN:L,A,E - но как правильно пользоваться, чтобы - увидел, придумал, записал!
feanor
Так. Трэш-сеанс гадания по геройским внутренностям открыт

В теме есть описалово нескольких стартовых функций
В частности, есть указание на то, что 004A8160 обрабатывает вход в объекты

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

Код
//----- (004A8160) --------------------------------------------------------
void __thiscall Enter2ObjectMain(int AvdManager, _Hero_ *Hero, signed int Par1, __int64 PosMixed)

видим чуть ниже свитч на обработку объектов по типам

нас интересует case 16, 16 - тип банков на карте патаму шта

Код
        case 16:
      sub_004A1210((void *)v6, (int)Hero, v5, PosMixed, SHIDWORD(PosMixed));
      return;


окау, переходим на нее

Код
char __thiscall sub_004A1210(void *this, int a2, int a3, int a4, int a5)
{
  void *v5; // edi@1
  _FMes_ *v6; // esi@1
  void *v7; // ecx@3
  void *v8; // eax@5
  _ZPrintf_ *v9; // eax@5
  int v10; // eax@8
  void *v11; // ecx@10
  void *v12; // eax@12
  _ZPrintf_ *v13; // eax@12
  char v14; // zf@15
  void *v15; // ecx@15
  char v16; // al@18
  char v17; // al@24
  char v18; // al@28
  char v19; // al@33
  _ZPrintf_ ZprPo; // [sp+Ch] [bp-3Ch]@5
  _FMes_ FMp; // [sp+1Ch] [bp-2Ch]@1
  _FMes_ FMesPo; // [sp+2Ch] [bp-1Ch]@1
  int v24; // [sp+44h] [bp-4h]@1

  v5 = this;
  v6 = (_FMes_ *)&(*off_0067029C)[*(_WORD *)(a3 + 34)];
  LOBYTE(FMp.Ref) = LOBYTE(v6->Ref);
  FMes_FreeMemoryOrDeref(&FMp, 0);
  FMes_CopyObject(&FMp, v6, 0, MinusOne);
  v24 = 0;
  LOBYTE(FMesPo.Ref) = BYTE3(a5);
  FMes_FreeMemoryOrDeref(&FMesPo, 0);
  LOBYTE(v24) = 1;
  sub_004FC620((void *)a3, *(_BYTE *)(a2 + 34));
  if ( *(_DWORD *)a3 & 0x2000000 )
  {
    if ( (_BYTE)a5 )
    {
      v7 = FMp.AMes.m.s;
      if ( !FMp.AMes.m.s )
        v7 = (void *)&EmptyString;
      v9 = ZSprintf(&ZprPo, *(char **)(*(_DWORD *)(::this.field_60 + 32) + 132), v7);
      LOBYTE(v24) = 2;
      FMes_CopyObject(&FMesPo, (_FMes_ *)v9, 0, MinusOne);
      LOBYTE(v24) = 1;
      FMes_FreeMemoryOrDeref((_FMes_ *)&ZprPo, 1);
      v8 = FMesPo.AMes.m.s;
      if ( !FMesPo.AMes.m.s )
        v8 = (void *)&EmptyString;
      MessageDialog((char *)v8, 1, -1, -1, -1, 0, -1, 0, -1, 0, -1, 0);
    }
    LOBYTE(v24) = 0;
    FMes_FreeMemoryOrDeref(&FMesPo, 1);
    v24 = -1;
    LOBYTE(v10) = FMes_FreeMemoryOrDeref(&FMp, 1);
    return v10;
  }
  if ( (_BYTE)a5 )
  {
    v11 = FMp.AMes.m.s;
    if ( !FMp.AMes.m.s )
      v11 = (void *)&EmptyString;
    v13 = ZSprintf(&ZprPo, *(char **)(*(_DWORD *)(::this.field_60 + 32) + 128), v11);
    LOBYTE(v24) = 3;
    FMes_CopyObject(&FMesPo, (_FMes_ *)v13, 0, MinusOne);
    LOBYTE(v24) = 1;
    FMes_FreeMemoryOrDeref((_FMes_ *)&ZprPo, 1);
    sub_00415CC0((int)v5, 0, -1);
    RedrawAdvInfoPart((int)v5, 0, 1, 1);
    v12 = FMesPo.AMes.m.s;
    if ( !FMesPo.AMes.m.s )
      v12 = (void *)&EmptyString;
    MessageDialog((char *)v12, 2, -1, -1, -1, 0, -1, 0, -1, 0, -1, 0);
    if ( pHeroWindowManager->ResultItemId != 30725 )
    {
      LOBYTE(v24) = 0;
      LOBYTE(v10) = FMes_FreeMemoryOrDeref(&FMesPo, 1);
      v15 = FMp.AMes.m.s;
      v14 = FMp.AMes.m.s == 0;
LABEL_23:
      if ( v14 )
        return v10;
      v17 = *((_BYTE *)v15 - 1);
      if ( v17 && v17 != -1 )
      {
        LOBYTE(v10) = v10 - 1;
        *((_BYTE *)v15 - 1) = v10;
        return v10;
      }
LABEL_36:
      LOBYTE(v10) = delete((char *)v15 - 1);
      return v10;
    }
  }
  else
  {
    v10 = sub_0052C1F0((_Hero_ *)a2, a4);
    if ( v10 <= 0 )
    {
      if ( FMesPo.AMes.m.s )
      {
        v16 = *((_BYTE *)FMesPo.AMes.m.s - 1);
        if ( v16 && v16 != -1 )
        {
          LOBYTE(v10) = v10 - 1;
          *((_BYTE *)FMesPo.AMes.m.s - 1) = v10;
        }
        else
        {
          LOBYTE(v10) = delete((char *)FMesPo.AMes.m.s - 1);
        }
      }
      v15 = FMp.AMes.m.s;
      FMesPo.AMes.m.s = 0;
      FMesPo.AMes.m.l = 0;
      FMesPo.AMes.a = 0;
      v14 = FMp.AMes.m.s == 0;
      goto LABEL_23;
    }
  }
  LOBYTE(v10) = sub_004ABAB0(v5, a2, (void *)a3, (int)NullString, a4, a5);
  if ( FMesPo.AMes.m.s )
  {
    v18 = *((_BYTE *)FMesPo.AMes.m.s - 1);
    if ( v18 && v18 != -1 )
    {
      LOBYTE(v10) = v10 - 1;
      *((_BYTE *)FMesPo.AMes.m.s - 1) = v10;
    }
    else
    {
      LOBYTE(v10) = delete((char *)FMesPo.AMes.m.s - 1);
    }
  }
  v15 = FMp.AMes.m.s;
  FMesPo.AMes.m.s = 0;
  FMesPo.AMes.m.l = 0;
  FMesPo.AMes.a = 0;
  if ( FMp.AMes.m.s )
  {
    v19 = *((_BYTE *)FMp.AMes.m.s - 1);
    if ( v19 && v19 != -1 )
    {
      LOBYTE(v10) = v10 - 1;
      *((_BYTE *)FMp.AMes.m.s - 1) = v10;
      return v10;
    }
    goto LABEL_36;
  }
  return v10;
}


видим горстку работы со строками и два вызова окон сообщений (MessageDialog, 0х4F6C00)

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

Код
    MessageDialog((char *)v12, 2, -1, -1, -1, 0, -1, 0, -1, 0, -1, 0);


обращаем внимание, что кусок кода с ветвлением контринтуитивен
Код
    if ( pHeroWindowManager->ResultItemId != 30725 )
    {
..
}

проверяет не согласие, а как раз отказ, потому что 30725 - код кнопки ок.

окау, идем в ОллиДебаггер
открываем там Эру, запускаем какую-нибудь карту, wogshadowfax, wogsaruman, wogeyeofsauron, ищем, например, сокровищницу гномов
смотрим обратно в Олю, переходим на оперируемую функцию (004A1210), ищем там нужный нам кусок кода со вторым диалогом, находим, это 004A13CB

нам надо, во-первых, заблокировать вызов диалога, во-вторых, сделать так, чтобы ответом на него всегда было "да"

смотрим на асмовый код в оле



можно тупо занопить весь вызов от 4A13CB до E6 и изменить сравнение как надо; см. выше, про функционал ветвления, нам нужно заменить условный переход на безусловный

но лучше поступить по другому: вставить в 4A13CB безусловный переход на мнсто сразу после функции (004A13EB)

еще лучше внимательно посмотреть на кусок между вызовом функции и сравнением и понять, что весь код там нам тоже, в общем, не нужен, значение регистра edx используется только здесь (highlight register - edx и аудит функции), так что прыгать можно с 4A13CB сразу на указанное в переходе 004A1486

окау, сказано-сделано
рисуем в оле же бинарную правку



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

возвращаемся в гирои
тыкаемся обратно в банк

тадам, мы огребаем не спросив

пляшем танец победы

или не пляшем, а переписываем бинарную правку в UN:C

4A13CB: E9B6000000 = !!UN:C4854731/1/233; !!UN:C4854732/1/182; !!UN:C4854733/1/0; !!UN:C4854734/1/0; !!UN:C4854735/1/0;

но лучше покороче, использовав древнюю магию little-endian
если опустить подробности, а я опущу, ибо мне лень, то
!!UN:C4854731/1/233;
!!UN:C4854732/4/182;

ура, можно постить

а еще можно потестить
а потом постить
но кто так делает?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.