meft Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 Добрый день. Ниже по ссылке картинка, в которой показано, что при поиске указателя мы находим исходный адрес. Картинка не моя, а найдена в интернете. У меня были похожие ситуации. Просьба объяснить, в каких ситуациях такое происходит, и как найти базовый адрес в таких случаях. http://funkyimg.com/view/E6iq Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 1 час назад, meft сказал: У меня были похожие ситуации. "При поиске указателей находится адрес, по которому и искали указатель " - довольно частый случай, особенно в играх, где инструкций работающих с нужными адресами мало (обычно 1 на запись и 1 на чтение), а адресов, с которыми работают эти инструкции очень много. Я сам практически никогда не ищу указателей, но изредка бывает необходимость и тоже сталкивался с такими ситуациями. Предложу способы: 1. Воспользоваться Сканом указателей самой СЕ (кстати, по-моему в версии СЕ 6.4 в настройках Скана был пункт, как раз касающийся этой проблемы, по-моему звучал так "Не учитывать указатели, приводящие к зацикливанию". В СЕ 6.5 я этого пункта не нашёл.), т.е. автоматическим поиском указателей. 2. При ручном поиске указателей откатиться на 1 (а может быть два) указателя назад и выбрать другой адрес. (Помню ну очень было обидно когда после 8 смещения нарвался на зацикливание , тогда так и бросил поиск не доделал). 3. Попробовать самому составить указатели прыгая по коду игры. В этом случае нужны высокие навыки в реверсе кода. По этому пункту лучше сразу же обратиться к MasterGH. 4. Отказаться от поиска указателей. И написать скрипты. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 15 февраля, 2016 Поделиться Опубликовано 15 февраля, 2016 mov edi,[edi] где edi перезаписывается. Надо узнать edi, до записи. Для этого в настройках поставить брейкпоинт на память, а не аппаратный Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 Но ведь edi перезаписывается значением, хранящимся по адресу edi. Т.е. новое значение edi становится равным предыдущему значению edi. Просьба подсказать, где я не прав. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 Аппаратные брейкпоинты тормозят после выполнения инструкции, а брейкпоинты на память - до выполнения. Отсюда можно будет увидеть, что изначально было в edi. Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 Это я понял. Я не понимаю, как в edi может быть что то другое, отличное от edi? Если в edi записывается значение edi. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 16 февраля, 2016 Поделиться Опубликовано 16 февраля, 2016 14 минуты назад, meft сказал: Я не понимаю, как в edi может быть что то другое, отличное от edi? До этой инструкции "edi,[edi]" edi было одно, после неё стало другим. Поэтому либо поставь бряк повыше этой инструкции. Либо можешь написать скрипт и получить в таблицу значения edi до инструкции. Скрытый текст label(address) registersymbol (address) ----------- newmem: mov [address],edi // в табличке добавь адресс с адресом "address" 4 байта HEX mov edi,[edi] ------------ address: dd 0 ------------ unregistersymbol (address) Ссылка на комментарий Поделиться на другие сайты Поделиться
meft Опубликовано 16 февраля, 2016 Автор Поделиться Опубликовано 16 февраля, 2016 спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения