· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Структура брейкпойнтов SoftIce

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Окт 31, 2003 22:25:00

В структуре команд для забрейкпончивания есть возможность указывать условия.
Литература по Айсу очень скупая.
Что-то я не очень понимаю как указывать условия.
Например мне надо бряк поставить на то когда в регистре ESI будет значение равное "С8".

Еще я встечал в условиях бряков такие строки "if (*(...", описаловку не нашел - что сие означает?


Дата: Окт 31, 2003 23:29:18

Блин, а ты уж меня заголовком перепугал. Я уж думать начал, что мол, за структура у бряка такая... Таким, насколько я понимаю, только kd отличается...
Что до твоего вопроса.
if (*(... 


Айс поддерживает бряки по условию. Это означает, что бряк будет выполнен только при соблюдении определенных требований. Твой конкретный случай означает: если содержимое чего-то не равно нулю. Это синтаксис С. * - указатель на что-то. Т.е., положим, можно и так:
if(*(esi) == 0xC8)


только это тоже не верно. По умолчанию айс считает, что значение справа - DWORD. А здесь - байт. Док у меня под руками сейчас нет - поправьте меня кто-нибудь?


Дата: Ноя 1, 2003 00:30:04

Egorka

* - указатель, т.е. *eax означает значение двойного слова по адресу в eax.
В твоём случае ставится проще bpx на_что_то IF (esi==0xC8)
В доках по SoftIce всё это есть и достаточно подробно к тому же
на русском, не знаю почему Володя до сих пор не положит их на сайт.


Дата: Ноя 1, 2003 00:32:35 · Поправил: Asterix

Нет volodya здесь не байт а DWORD, раз уж это esi==


Дата: Ноя 1, 2003 05:31:57

Читаем доки:

There is a subtle difference between the indirection operators (->) and (.)
and the indirection operators (*) and (@). The result of an (->)or (.) operator
is a plain Dword value, while the result of (*) and (@) is an addresstype.


Вроде бы так, ан, нет:

The SoftICE expression evaluator treats all operand types as Dword
(unsigned long) values. If you de-reference memory, SoftICE always returns a Dword value.


Словом, надо на всякий случай приводить явно!
Т.е., где-то так:
if(*byte((esi) == 0xC8))


Дата: Ноя 1, 2003 05:41:17

Я имел ввиду без указателя, т.е. IF (esi==0xC8)
кстати об этом первоначально и спрашивалось, со звёздочкой это приобретает
другой смысл :-)


Дата: Ноя 1, 2003 08:37:33

volodya
А ссылку дай пожалуйста на документ из которого ты выдержку дал.


Дата: Ноя 1, 2003 09:43:09

Простите меня у меня руки не тем концом и растут неоттуда.

Мне нужен бряк на изменение значения в ESI в любом месте.
т.е bpx на_что_то IF (esi==0xC8) , "на_что_то" - зто и есть ESI.

bpx ESI IF (esi==0xC8)
или
bpm ESI IF (esi==0xC8)

но они не брякают.


Дата: Ноя 1, 2003 10:57:54 · Поправил: Four-F

Egorka, если те под NT такое надо, то обломись, т.к. бряки ставятся только на адрес и уже в этой конкретной точке проверяется условие. Т.е. поставить бряк на изменение регистра невозможно. А если в 9x, то делал я такое. Теория такова: ставишь бряк на диапазон адресов BPR, в условии накладываешь маску на содержимое памяти куда eip указывает, т.е. попросту пытаешься определить по опкоду выполняется ли операция записи в интересующий тебя регистр - выделяещь из опкада поле, в котором содержится значение регистра и сравниваешь его. Если это интересующий тебя регистр, то смотришь его значение.

Мда... Боюсь не очень понятно :-) Щас мне лень голову ломать и 9x нету, но на другом компе у мя лежит памятка как это делается. Если те под 9х, то завтра-послезавтра могу посмотреть.


Дата: Ноя 1, 2003 11:58:10

Да, да под 9х.
Хотя у меня и 9х и ме и хр и еще хочу 2000 (и поставлю).


Дата: Ноя 1, 2003 13:54:03

Egorka

Те цитаты что привёл volodya из документов что находятся в пакете
Driver Studio ;-)
Вот дока на русском, гы, Володя, это не варёз?!
_http://cr0aker.tiraet.com/files72/siceug_rus.rar


Дата: Ноя 1, 2003 14:41:02

И еще мужики, я не въезжаю....
У меня в определенном процессе происходит обращение к адресу 73d7d8.
Бряк я поставил : bpm 73d7d8 rw
Но у меня он срабатывает только на чтение.
На запись не срабатывает.
Я закрывал процесс и запускал снова (бряк был поставлен).
Так спрашивается откуда берутся данные по адресу 73d7d8?
Как они туда записываются, что Айс их неловит?
Я догадываюсь, что запись происходит в самом начале загркзки процесса...


Дата: Ноя 2, 2003 01:01:10

Egorka

Чтоб тебе пусто было с твоими объяснениями проблемы! Что это за адрес? Что за процесс? Ты ни фига не сказал и ждешь помощи?


Дата: Ноя 2, 2003 13:33:20

Дядя Володя, чего же тут непонятного.
Тебя чего расписать что-ли все.
Ну ты сам напросился:
Процесс - игра NHL2004 (загружена, находится в памяти).
Адрес 73d7d8 - по этому адресу хранится значение указывающее на скан-код клавиши "ПАС" (в хоккее бывают голы, а бывают пасы - для тех кто в танке).

По-моему проще не стало.

Так вот я хочу узнать как и где в ячейку 73d7d8, происходит запись.
bpm 73d7d8 - не срабатывает (ставил из модуля NHL2004).


Дата: Ноя 2, 2003 13:35:07

Asterix
Спасибо за русскую описаловку Айса - совсем другое дело.

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080