PE-шники открывает и дизасм вроде показывает. Хотя да, я её в основном для ARM юзал.
(07.02.2010 20:37)Дьякон Wrote: [ -> ]Иду конечно тоже не плохо иметь. Но думаю тебе и Оли хватит пока.
Отвечая в столь же романтическом ключе: эту девушку я снял. Поизвращаемся, если она согласна.

Тем более, есть несколько вполне чётких целей...
создал dll позволяющую расширить список стартовых героев за счет добавления героев из кампаний. Пока добавляются Мюллих и Катерина и банятся Сильвия и Саня. Потом доделаю, чтобы список динамически расширялся.
Большое спасибо Сергею Роженко, ASM, Дьякон, Берсеркер за большую помощь в создании этой dll.
Скачать можно здесь:
http://www.heroes-iii.com/files/sag_dll_v1.zip
SAG, для паблика более интересен адрес массива с героями и принцип.
После того, как увидел то, что можно творить через !!UN:C, очень хочется научиться творить такое самому. В наличии имеются Ida Pro, MASM, Asm_Ed, CodeView, Hiew, OllyDbg, Peid, QuickUnpack. Есть, как видите, многое, но навыка - ноль. Подскажите, пожалуйста, полезную литературу по данному вопросу, поскольку здесь я - даже больший нуб, чем в ERM.
Через АртМани, а потом !!UN:C уже умею менять кое-какие тексты и данные (спасибо огромное MOP'у и gamecreator'у за ценные советы). Однако этого явно недостаточно. Хочется иметь куда большие возможности. В частности, интересует методика создания новых триггеров.
Quote:В частности, интересует методика создания новых
триггеров.
Мне тоже это очень хотелось бы знать. Там вроде надо что-то менять в коде, но как найти, где и понять на что?
Насколько я понял из исходника dll для Эры, который мне предоставил MOP, отлавливается адрес и при обращении к этому адресу выполняются нужные действия.
Так и есть. Достаточно выучить азы ассемблера. Руководства можно найти на wasm.ru, как и весь нужный интрументарий.
Суть создания "нового триггера" в Эре - это в нужном месте кода героев/вога:
- Прописать прыжок на свою функцию
- Сохранить контекст исполнения
- Сохранить параметры нового события, чтобы их можно было достать через SN:X
- Вызвать функцию вога: CallFunc с номером функции
- Вызов приведёт к вызову функции ЕРМ и т.д.
- Восстановить контекст исполнения (регистры, флаги, чаще всего только регистры через POPAD)
- Выполнить код героев/вог, затёртый нашим перехватчиком
- Совершить прыжок на продолжение кода
*Чувствует себя змеем-искусителем*
Вот длл с более подробным (откомментированным) исходником. Создаёт триггер на лечение Палаткой.
Константы взяты из исходников ЭРЫ, ибо так удобнее. Авторская процедура - HOOK_tent.
Как пользоваться триггером - написано
здесь.
Bers, огромное спасибо! А как это же через !!UN:C?
Научил плохому...
Через UN:C это фактически и не делается. Просто я для тех, у кого даже ЭРА не стоит, делаю новые события с помощью записи командой UN:C в неиспользуемые игрой участки памяти того же самого ассемблерного кода. Вот те два события (пост-HL и вход в экран города) я записал, кажется, в неиспользуемую после загрузки exe сод-таблицу Трансформатора Скелетов.
Ответ: учить асм, больше никак.
MOP, спасибо за пример. Довольно чётко. Разве что "PTR DS:" лишние...
Через dll даже лучше. Но здесь нужны доп. программы. Я пытался скомпилировать исходник MOP'а, заменив номера функций, но мои Турбо и Визуал Паскали выдали ошибку: ТП - что пропущен бегин, ВП -что нет файла win.vpi (ошибка 15). Может, надо через что-то еще? Хотя для файла с расширением pas что еще может быть...