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

Full Version: Исследование героев
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
GhostManSD, Virtual Pascal из папки Эры запускал?
/попробуй команду Make вместо Compile.
(01.09.2010 16:38)Berserker Wrote: [ -> ]MOP, спасибо за пример. Довольно чётко. Разве что "PTR DS:" лишние...
Учту. Я просто скопировал комментарий из исходника к бинарнику. Себе-то длл-ок пока не делаю - для этого мне нужна какая-то... глобальная задумка, что ли (как для тебя - ЭРА). А пока всё в exe...
(01.09.2010 15:04)Berserker Wrote: [ -> ]Суть создания "нового триггера" в Эре - это в нужном месте кода героев/вога:
...

Как можно найти это нужное место?
А вот это самое сложное и трудозатратное...
Пример есть в туториале Дьякона. Игра по ходу выполнения кода обращается к ресурсам - картинкам, дефам, звукам, текстам. Поставив брейкпойнт на указатель к этому ресурсу, находим примерный интересующий нас участок кода и рассматриваем его. Я, например, вышел к лечению Палаткой через указатель на звук regener.wav.
Но далеко не всегда так просто. Порой надо обладать чутьём, представлять, в каком виде могут храниться данные. Почти интуиция.
MOP Wrote:... в туториале Дьякона
Это который должен быть по ссылке в первом посте темы? Ссылка не работает.
Не портите нервы связкой паскаля и асма, припудренной милыми досовскими средами.
Портите нервы связкой С и асма.
Quote:Как можно найти это нужное место?
Тут надо предметно смотреть - в каждом конкретном случае вопрос особый.
На палатку я бы выходил через давно записанный на бумажке адрес свитча на действия юнитов в бою. Этот свитч я нашел через функцию каста заклинаний. А её я нашел, кажется, через функцию проигрывания звука.
MOP, а если в том неиспользуемом участке патч какой-то записался? получится каша.
+ ещё одна причина делать это по-человечески, а не UN:C.
Но не буду же я объяснять простому человеку, как поставить ЭРУ или прилепить длл к экзешнику.
Quote:Портите нервы связкой С и асма.
Ничем не лучше, если не считать, что из-за крайней низкоуровневости, что-то большое писать без ошибок нереально. По поводу среды - использую Delphi, но не его IDE, а notepad++. Писать можно в чём нравится и как нравится, а компилировать хоть через командную строку. И как сказал ZVS на ag.ru, это не досовское окно, а полноценное win-32 приложение.

Quote:брейкпойнт
Перевожу: точка останова.

Quote:свитча
Перевожу: разветвление/переключатель (серия подряд идущих если..то).
Quote:Перевожу: точка останова.
Кстати, о бряках.
В той же оле есть три вида бряков: Int3, Memory и Hardware.

Первый ставится на код и срабатывает, что характерно, при проходе про коду.
Второй ставится на память и срабатывает при чтении\записи в память.
Третий может ставиться и на код, и на память, но имеет ряд ограничений - типа, только четыре бряка такого типа, брячится только до четырех байт (и то, зависит от фактического адреса).

Дык вот..для бряков на код лучше использовать первые.
А вот для бряков на память - третьи, несмотря на все их ограничения.
Аппаратные точки останова обрабатывает процессор (регистры Dr0-Dr3). А Olly реализует это дело через VirtualProtect с нулевыми правами на всю страницу памяти и перехват-обработку исключений. Если доступ к странице нужен редко, то в принципе, терпимо, если постоянно, то тормоза будут существенные.
О Боже... Х_Х
Quote:если постоянно, то тормоза будут существенные.
если обращения чаще, чем примерно раз в секунду - герои нафиг повисают. Приходится ставить-снимать паузу.
Так что, скажем, изменялку параметров героя с меморибряками выявить удастся только при достаточном терпении.
Quote:О Боже... Х_Х
ась? Все оказалось несколько сложнее, чем представлялось?)
Дык на самом деле все сложнее, чем на самом деле.
Quote:О Боже... Х_Х
Я бы начал с обычного: wasm.ru Введение в крекинг с нуля. Хотя может МОР что посоветует, он вроде как обходился без азов программирования.
Quote:или чистотой языка
В отличие от жаргона корректный литературный перевод уже несёт 90% смысла даже для человека непосвящённого. В СССР было понятие АВОСТ - аварийного останова. Это самый нормальный перевод для halt, например. Тоже самое и с breakpoint. Это и есть точка останова программы. И человек сразу вникает в суть дела. А жаргон используют все, но не везде же и среди тех, кто понимает.

feanor, по твоему уже удалённому посту. 6[a] в си тоже массив, как и 256[a]{b} и т.д. Но это не полноценный массив с двумя/более измерениями, а просто синтаксический сахар для вычисления адреса (собственно, нельзя создать тип-многомерный массив, массив можно использовать как переменную или одномерный и никакого контроля над границами тоже нет). Касаемо передачи параметра для изменения, это был не юмор. Введённая в Алголе60 конструкция VAR означает, что внутри функции работа с переменной/массивом/структурой вполне прозрачна, но реально компилятор имеет дело со ссылкой. Тем не менее проверка типов остаётся жёсткой. В СИ нет возможности передать аргумент для изменения иначе как использованием низкоуровневого средства ссылки. Именно поэтому, несмотря на тотальную популярность СИ-семейства, я бы не советовал людям формировать своё мировоззрение в сфере программирования, начиная с языка, чей основой является близость к ассемблеру и минимальная типизация. И тем более, если нужно что-то реализовать, а навыков нет. И конечно же, не посоветовал начинать с монстров класса СИ++, Ада, на прочтение одной лишь спецификации по которым уйдёт пол жизни, а остальная половина на знакомство с особенностями компиляторов.

P.S В посте была ошибка. Передача аргумента в качестве изменяемой переменной, а не по значению.
Reference URL's