На хабрахабре обнаружился замечательный [пост], содержащий тучу информации для помощи в изучении этого не менее замечательного языка. Берём на вооружение! Что-то я уже в блоге упоминал, что-то - нет.
Вот есть вопрос.В одной игре под названием "Batman Arkham Asylum" одна инструкция отвечает за жизни персонажа и за жизни врагов, конечно на первый взгляд кажеться можно найти выход, но на самом деле получается не так, при находжении указателя он сбрасывается, и нет инстукции которая бы отвечала за жизни игрока.Только одни и теже инструкции у игрока и у врагов, но получилось сделать убийство с одного удара.Вот просмотрел структуры игрока и врагов, ничего не нашёл.Как я понял нужно найти что-то уникальное для структуры игрока, и затем сделать сравнение с этой инструкцией.Может чего-то я не так делаю или где-то ошибся подскажите пожалуйста.
X1, что значит - "сбрасывается" указатель? Он, собственно, на то и указатель, чтобы всегда указывать на нужный адрес, даже если игру перезапускают.
Если игра использует одну и ту же инструкцию для обсчёта жизни врагов и игрока, то надо поставить на неё breakpoint в отладчике и, то ударяя врагов то давая ударить себя, смотреть на регистры. Какой-то из них будет уникальным только для игрока. Игра в любом случае должна отличать игрока от врага. Если не выйдет - можно поискать выше по коду что-нибудь вроде cmp и затем je или же test и затем jne - сравнение игрока и врага.
Вообще, там может быть одна штука, о которой я ещё не рассказывал. Это когда положение указателя меняется, т.е. бывают указатели на указатели. Вызывается это в случае, когда, например, исполняемый код находится во внешней dll-библиотеке - игра подгружает эту библиотеку и ей присваивается какое-то начальное смещение (базовое), а всё остальное пляшет уже с поправкой на него, вот базовое смещение как раз и бывает разным всякий раз.
Если твоя игра так делает, то это будет отличным примером для урока - сегодня-завтра проверю. :)
Да игра так делает, спасибо за подсказку были предположения, но не решался обосновать.Да там впринципе-то можно и без указателей обойтись, если "фильтр" сделать.
Не люблю мат и низкий уровень грамотности. Чем конкретнее поставите свой вопрос и чем лучше он будет выглядеть - тем большая вероятность на мой ответ. :)
Вот есть вопрос.В одной игре под названием "Batman Arkham Asylum" одна инструкция отвечает за жизни персонажа и за жизни врагов, конечно на первый взгляд кажеться можно найти выход, но на самом деле получается не так, при находжении указателя он сбрасывается, и нет инстукции которая бы отвечала за жизни игрока.Только одни и теже инструкции у игрока и у врагов, но получилось сделать убийство с одного удара.Вот просмотрел структуры игрока и врагов, ничего не нашёл.Как я понял нужно найти что-то уникальное для структуры игрока, и затем сделать сравнение с этой инструкцией.Может чего-то я не так делаю или где-то ошибся подскажите пожалуйста.
ОтветитьУдалитьX1, что значит - "сбрасывается" указатель? Он, собственно, на то и указатель, чтобы всегда указывать на нужный адрес, даже если игру перезапускают.
ОтветитьУдалитьЕсли игра использует одну и ту же инструкцию для обсчёта жизни врагов и игрока, то надо поставить на неё breakpoint в отладчике и, то ударяя врагов то давая ударить себя, смотреть на регистры. Какой-то из них будет уникальным только для игрока. Игра в любом случае должна отличать игрока от врага. Если не выйдет - можно поискать выше по коду что-нибудь вроде cmp и затем je или же test и затем jne - сравнение игрока и врага.
Любой указатель при перезапуске игры не работает.
ОтветитьУдалитьВообще, там может быть одна штука, о которой я ещё не рассказывал. Это когда положение указателя меняется, т.е. бывают указатели на указатели. Вызывается это в случае, когда, например, исполняемый код находится во внешней dll-библиотеке - игра подгружает эту библиотеку и ей присваивается какое-то начальное смещение (базовое), а всё остальное пляшет уже с поправкой на него, вот базовое смещение как раз и бывает разным всякий раз.
ОтветитьУдалитьЕсли твоя игра так делает, то это будет отличным примером для урока - сегодня-завтра проверю. :)
Да игра так делает, спасибо за подсказку были предположения, но не решался обосновать.Да там впринципе-то можно и без указателей обойтись, если "фильтр" сделать.
ОтветитьУдалитьЕсли нашёл решение - то круто, динамическая подгрузка dll - известная и даняя проблема, с которой пытаются бороться. :)
ОтветитьУдалитьkeng
ОтветитьУдалитьЕсли будешь статью про эту игру писать, то предупреждаю там xlive антиотладочная защита.