останов на каждой команде в SoftIce

Тема в разделе "WASM.RESEARCH", создана пользователем deamon_t, 18 ноя 2004.

  1. deamon_t

    deamon_t New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2004
    Сообщения:
    4
    Люди подскажите как сделать чтобы срабатывал брекпоинт на каждой команде... это нужно для того чтобы проверять по условию, память например... Когдато давно я такую фишку видел... Сейчас нефига найти не смог :-( Возможно там и bp был а чегото другое, точно не помню... но главное что оно работало!
     
  2. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Была такая штука. Называлась breakpoint on memory range. Но это только в айсе под маздай. Под NT такого нет.
     
  4. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    а чем это отличается от трассировки?
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Тем, что можно было на айс переложить проверку условия.



    Три года назад хотел статью писАть по точкам прерываний. Вот кусочек черновика.



    ---------------------------------------------------------------------- ---

    Пример отлова точки выполнения определенной инструкции

    Notepad.exe (оконная процедура)


    Код (Text):
    1. 0187:00401C74  55                  PUSH      EBP
    2. 0187:00401C75  8BEC                MOV       EBP,ESP                            
    3. 0187:00401C77  56                  PUSH      ESI                                
    4. 0187:00401C78  8B750C              MOV       ESI,[EBP+0C]                      
    5. 0187:00401C7B  83FE05              CMP       ESI,05                            
    6. 0187:00401C7E  7714                JA        00401C94                          
    7. 0187:00401C80  0F8406010000        JZ        00401D8C                          
    8. 0187:00401C86  83FE02              CMP       ESI,02                            
    9. 0187:00401C89  0F84F0000000        JZ        00401D7F                          
    10. 0187:00401C8F  E983000000          JMP       00401D17                          
    11. 0187:00401C94  83FE10              CMP       ESI,10                            
    12. 0187:00401C97  7723                JA        00401CBC                          
    13. 0187:00401C99  0F84A1010000        JZ        00401E40                          
    14. 0187:00401C9F  83FE06              CMP       ESI,06                            
    15. 0187:00401CA2  0F8422010000        JZ        00401DCA                          
    16. 0187:00401CA8  83FE07              CMP       ESI,07                            
    17. 0187:00401CAB  0F8452010000        JZ        00401E03                          
    18. 0187:00401CB1  83FE08              CMP       ESI,08                            
    19. 0187:00401CB4  0F846E010000        JZ        00401E28                          
    20. 0187:00401CBA  EB5B                JMP       00401D17                          
    21. 0187:00401CBC  83FE1A              CMP       ESI,1A                            
    22. 0187:00401CBF  7711                JA        00401CD2                          
    23. 0187:00401CC1  0F84E5030000        JZ        004020AC                          
    24. 0187:00401CC7  83FE11              CMP       ESI,11                            
    25. 0187:00401CCA  0F84D0010000        JZ        00401EA0                          
    26. 0187:00401CD0  EB45                JMP       00401D17                          
    27. 0187:00401CD2  83FE1C              CMP       ESI,1C
    28. 0187:00401CD5  0F8407020000        JZ        00401EE2




    Допустим надо прерваться при выполнении команды JA XXXXXXXX (опкод 77??)

    Ставим bpr на диапазон внутри которого надо искать JA:
    Код (Text):
    1.     bpr 00401C74 00401CD0 r if byte(*EIP)==77




    Прервемся по адресам:
    Код (Text):
    1. 0187:00401C7E  7714                JA        00401C94
    2. 0187:00401C97  7723                JA        00401CBC
    3. 0187:00401CBF  7711                JA        00401CD2


    ---------------------------------------------------------------------- ---
     
  6. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Под NT такого нет.



    IceExt - полезная штука. Там была робкая попытка что-то такое смастрячить. Никогда, правда, не пользовался :dntknw:
     
  7. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433


    Команда T (или F8) - отладчик будет вставлять INT3 после каждой команды с заходами в процедуры





    Ты определись чего тебе надобно - для проверки содержимого памяти на условия есть BPM.



    Если ты имеешь ввиду BPR (не знаю как Four-F это почувствовал :) ), то как совершенно правильно подсказывает Volodya: !bpr - команда из IceExt, установка бряка (на исполнение, чтение или запись) на диапазон памяти, размером кратным 1000h байт. Не поддерживает все опции команд по установке брейкпоинтов (как то - IF и DO), поэтому то что описал Four-F не прокатит
     
  8. deamon_t

    deamon_t New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2004
    Сообщения:
    4
    "Если ты имеешь ввиду BPR (не знаю как Four-F это почувствовал :)"

    Вобщето именно это я и имел ввиду :^) И точно для этих целей и думал использовать... Очень жалко что убрали эту функцию... Интересно по какой причине :-\ Вроде нечто подобное есть в OllyDbg, вот как-раз смотрю... какаято она правда неудобная... Большое спасибо за ответы...