01.09.2010, 17:22
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 41 42 43 44 45 46 47 48 49 50 51 52 53
01.09.2010, 18:20
(01.09.2010 16:38)Berserker Wrote: [ -> ]MOP, спасибо за пример. Довольно чётко. Разве что "PTR DS:" лишние...Учту. Я просто скопировал комментарий из исходника к бинарнику. Себе-то длл-ок пока не делаю - для этого мне нужна какая-то... глобальная задумка, что ли (как для тебя - ЭРА). А пока всё в exe...
01.09.2010, 18:29
(01.09.2010 15:04)Berserker Wrote: [ -> ]Суть создания "нового триггера" в Эре - это в нужном месте кода героев/вога:
...
Как можно найти это нужное место?
01.09.2010, 18:29
А вот это самое сложное и трудозатратное...
Пример есть в туториале Дьякона. Игра по ходу выполнения кода обращается к ресурсам - картинкам, дефам, звукам, текстам. Поставив брейкпойнт на указатель к этому ресурсу, находим примерный интересующий нас участок кода и рассматриваем его. Я, например, вышел к лечению Палаткой через указатель на звук regener.wav.
Но далеко не всегда так просто. Порой надо обладать чутьём, представлять, в каком виде могут храниться данные. Почти интуиция.
Пример есть в туториале Дьякона. Игра по ходу выполнения кода обращается к ресурсам - картинкам, дефам, звукам, текстам. Поставив брейкпойнт на указатель к этому ресурсу, находим примерный интересующий нас участок кода и рассматриваем его. Я, например, вышел к лечению Палаткой через указатель на звук regener.wav.
Но далеко не всегда так просто. Порой надо обладать чутьём, представлять, в каком виде могут храниться данные. Почти интуиция.
01.09.2010, 18:38
MOP Wrote:... в туториале ДьяконаЭто который должен быть по ссылке в первом посте темы? Ссылка не работает.
01.09.2010, 18:38
Не портите нервы связкой паскаля и асма, припудренной милыми досовскими средами.
Портите нервы связкой С и асма.
Портите нервы связкой С и асма.
Quote:Как можно найти это нужное место?Тут надо предметно смотреть - в каждом конкретном случае вопрос особый.
На палатку я бы выходил через давно записанный на бумажке адрес свитча на действия юнитов в бою. Этот свитч я нашел через функцию каста заклинаний. А её я нашел, кажется, через функцию проигрывания звука.
01.09.2010, 19:23
MOP, а если в том неиспользуемом участке патч какой-то записался? получится каша.
01.09.2010, 19:30
+ ещё одна причина делать это по-человечески, а не UN:C.
Но не буду же я объяснять простому человеку, как поставить ЭРУ или прилепить длл к экзешнику.
Но не буду же я объяснять простому человеку, как поставить ЭРУ или прилепить длл к экзешнику.
01.09.2010, 19:30
Quote:Портите нервы связкой С и асма.Ничем не лучше, если не считать, что из-за крайней низкоуровневости, что-то большое писать без ошибок нереально. По поводу среды - использую Delphi, но не его IDE, а notepad++. Писать можно в чём нравится и как нравится, а компилировать хоть через командную строку. И как сказал ZVS на ag.ru, это не досовское окно, а полноценное win-32 приложение.
Quote:брейкпойнтПеревожу: точка останова.
Quote:свитчаПеревожу: разветвление/переключатель (серия подряд идущих если..то).
01.09.2010, 19:58
Quote:Перевожу: точка останова.Кстати, о бряках.
В той же оле есть три вида бряков: Int3, Memory и Hardware.
Первый ставится на код и срабатывает, что характерно, при проходе про коду.
Второй ставится на память и срабатывает при чтении\записи в память.
Третий может ставиться и на код, и на память, но имеет ряд ограничений - типа, только четыре бряка такого типа, брячится только до четырех байт (и то, зависит от фактического адреса).
Дык вот..для бряков на код лучше использовать первые.
А вот для бряков на память - третьи, несмотря на все их ограничения.
01.09.2010, 20:11
Аппаратные точки останова обрабатывает процессор (регистры Dr0-Dr3). А Olly реализует это дело через VirtualProtect с нулевыми правами на всю страницу памяти и перехват-обработку исключений. Если доступ к странице нужен редко, то в принципе, терпимо, если постоянно, то тормоза будут существенные.
01.09.2010, 20:27
О Боже... Х_Х
01.09.2010, 20:32
Quote:если постоянно, то тормоза будут существенные.если обращения чаще, чем примерно раз в секунду - герои нафиг повисают. Приходится ставить-снимать паузу.
Так что, скажем, изменялку параметров героя с меморибряками выявить удастся только при достаточном терпении.
Quote:О Боже... Х_Хась? Все оказалось несколько сложнее, чем представлялось?)
Дык на самом деле все сложнее, чем на самом деле.
01.09.2010, 21:22
Quote:О Боже... Х_ХЯ бы начал с обычного: wasm.ru Введение в крекинг с нуля. Хотя может МОР что посоветует, он вроде как обходился без азов программирования.
01.09.2010, 21:45
Quote:или чистотой языкаВ отличие от жаргона корректный литературный перевод уже несёт 90% смысла даже для человека непосвящённого. В СССР было понятие АВОСТ - аварийного останова. Это самый нормальный перевод для halt, например. Тоже самое и с breakpoint. Это и есть точка останова программы. И человек сразу вникает в суть дела. А жаргон используют все, но не везде же и среди тех, кто понимает.
feanor, по твоему уже удалённому посту. 6[a] в си тоже массив, как и 256[a]{b} и т.д. Но это не полноценный массив с двумя/более измерениями, а просто синтаксический сахар для вычисления адреса (собственно, нельзя создать тип-многомерный массив, массив можно использовать как переменную или одномерный и никакого контроля над границами тоже нет). Касаемо передачи параметра для изменения, это был не юмор. Введённая в Алголе60 конструкция VAR означает, что внутри функции работа с переменной/массивом/структурой вполне прозрачна, но реально компилятор имеет дело со ссылкой. Тем не менее проверка типов остаётся жёсткой. В СИ нет возможности передать аргумент для изменения иначе как использованием низкоуровневого средства ссылки. Именно поэтому, несмотря на тотальную популярность СИ-семейства, я бы не советовал людям формировать своё мировоззрение в сфере программирования, начиная с языка, чей основой является близость к ассемблеру и минимальная типизация. И тем более, если нужно что-то реализовать, а навыков нет. И конечно же, не посоветовал начинать с монстров класса СИ++, Ада, на прочтение одной лишь спецификации по которым уйдёт пол жизни, а остальная половина на знакомство с особенностями компиляторов.
P.S В посте была ошибка. Передача аргумента в качестве изменяемой переменной, а не по значению.