Wake of Gods Forum | Форум Во Имя Богов

Full Version: Typhon v. 2.9
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Согласен)
Вот файл
XEPOMAHT, не могли бы Вы подсказать мне, по какому адресу лежит MonTable2?
(13.02.2021 01:25)Raistlin Wrote: [ -> ]по какому адресу лежит MonTable2?

Прямого адреса нет (точнее он есть, но только внутри Тифона). Можно только вычислить, но без гарантий, что после какого-нибудь обновления Тифона он не поменяется. В исходниках Тифона добавь RedirectMemoryBlock на MonTable2, чтобы он передавался Эре, а потом как его взять из Эры - наверное знаешь. 144
XEPOMAHT, как взять его потом, я и вправду знаю, но... К сожалению, я не знаю, как воспользоваться RedirectMemoryBlock в условиях ассемблера. Правда, у меня имеется иная идея: что, если на месте какой-то не используемой больше функции создать новую, которая будет попросту записывать в какой-то регистр адрес таблицы? Я тогда смогу вызвать ее где-то ещё, сохранив при этом предыдущее значение, хранящееся в регистре, куда-нибудь скопировать указатель, а затем восстановить данные в том регистре, куда я его сохранял.
Посмотреть в исходники Тифона 2.7z можно. Я тоже не знал, но нагуглил же.

Code:
section '.idata' data readable
data import
; Импортируемые процедуры
  library kernel32, 'kernel32.dll',\
    era, 'era.dll'

  import kernel32,\
      CreateFileA,'CreateFileA',\
      GetFileSize, 'GetFileSize',\
      VirtualAlloc, 'VirtualAlloc',\
      ReadFile, 'ReadFile',\
      CloseHandle, 'CloseHandle',\
      VirtualFree, 'VirtualFree',\
      WriteFile, 'WriteFile'

  import era,\
    RegisterHandler, 'RegisterHandler',\
    RedirectMemoryBlock, 'RedirectMemoryBlock'

Code:
stdcall [RedirectMemoryBlock], 7D0C90h, 196 * sizeof._Creature_, MonTable
Berserker, спасибо! Не могли бы Вы только подсказать мне, что находится по адресу 7D0C90?
MonTable. То есть основная таблица монстров. Адрес воговский. ВоГ расширил содовскую таблицу, а МОР — воговскую.
Все, теперь понял. Собственно, то, что это воговский адрес, я знаю, проблема была в том, что я пока не разобрался, как находить нужное в воговской секции кода.
Еще раз спасибо за пример, это, правда, не совсем то, чего мне было нужно, но, кажется, я знаю, как мне быть. Я имел ввиду вот эту таблицу:

Делать надо вот так?
Code:
stdcall [RedirectMemoryBlock], (свободный адрес, за которым идет необходимое колличество пустого пространства), 59000, MonTable2
Да.
Хорошо. Кстати, а где можно найти 59000 байт пустого пространства? Вот я ткнул наугад на адрес 023474B2, как я могу быть уверенным, что в этом месте ничего нет? Или я не могу?
ОМГ. Ты либо объявляешь обычную статическую/глобальную переменную как часть статической памяти DLL, либо динамически её выделяешь через что угодно от геройской функции MAlloc до VirtualAlloc. Но тут имеет смысл статически новую таблицу объявить. MonTable2.
Berserker, по идее, эта таблица и добавлена как статическая, но впрямую она доступна, насколько я понимаю, только внутри самого Тифона. Мне же надо прочитать ее содержимое в собственном плагине, который написан уже не ассемблере, а на С++.
В общем, я отправляюсь гуглить - надеюсь удастся найти решение.
Raistlin, What do you plan to do with MonTable2 in Typhon? Discover new addresses for UN:C?
No, I just want to add a chance for Preventive Counterstrike. It should not work always, but I don't know how to do it using only Assembler. If I will not find a way, I will simply recreate this ability using C++.
Raistlin,
В Тифоне делаем так:

stdcall [RedirectMemoryBlock], оригинальный_адрес_MonTable2_в_воге, 59000, MonTable2

В твоём плагине делаем так: в событии OnAfterStructRelocations получаем адрес таблицы по GetRealAddr(оригинальный_адрес_MonTable2_в_воге).
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
Reference URL's