|
|
| Посл.отвђт | Сообщен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 Спасибо за русскую описаловку Айса - совсем другое дело. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.080 |