страннное поведение soft-ice на хитром макросе

Тема в разделе "WASM.RESEARCH", создана пользователем n2k, 8 апр 2006.

  1. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    вот макрос для айса:

    XXX="BPM EIP X IF (/* условие-продолжение трассировки */) DO \"G;T;BC bpindex;XXX;\"";



    так вот он зараза не работает ;(

    есть какие идеи почему такое может быть и как с этим бороться?
     
  2. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    n2k





    Ты хочешь этим макросом трассировать программу только тогда, когда выполняется "условие"? Я верно понял?

    Если да, то непонятно, зачем тебе в DO команда 'G'? Продолжать работу после каждого прерывания? Но именно она, IMHO, тебе и мешает.

    Допустим, условие выполнилось, и запустилось действие DO. Тогда первой же его командой - в данном случае 'G' - SI снова запускается в работу со следующей команды (программы, НЕ макроса!) (так как стартовый адрес в 'G' не указан) и будет работать "до скончания века" (адрес остановки в 'G' также не указан!). Ведь прервать работу сможет лишь повторное попадание на эту же (или какую другую) контрольную точку. ("The G command without parameters behaves the same as the X command.", - сказано в справочнике по командам.) И продолжить свою работу - выполнить команду 'T' и все последующие - макрос не сможет. После попадания на контрольную точку начнется повторное выполнения заданного действия 'DO', т.е. снова будет выдана команда 'G'



    Вот лог работы аналогичного макроса (без 'if'):
    Код (Text):
    1. :xxx
    2. :g
    3. Break due to BP 00: BPMB 0008:F8818C7E X DR0 DO "g; t; bc bpindex; xxx"
    4.     (ET=14.31 microseconds)
    5. Break due to BP 00: BPMB 0008:F8818C7E X DR0 DO "g; t; bc bpindex; xxx"
    6.     (ET=62.55 microseconds)
    7. Break due to BP 00: BPMB 0008:F8818C7E X DR0 DO "g; t; bc bpindex; xxx"
    8.     (ET=65.18 microseconds)
    9. ...


    Идут сплошные прерывания без продолжения работы макроса, остановить которые можно только по Ctrl-D.



    Попробуй обойтись без 'G'.
     
  3. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    Sergey_R

    мужик, я тебя уважаю, но ты не прав.

    когда мы говорим

    :BPX EIP

    то... ничего не происходит. а должно?

    если мы дадим T - EIP перейдет на след.

    кмнд,но бряк невплывет

    (а он и не должен,т.к. T обрабатывает сам айс)



    поэтому мы даем X или G. Вот тогда айс всплывает!



    после чего мы делаем T для перехода

    на след. команду, удаляем пред. точку останова

    и ставим новую.



    осталась разобраться с этими гребанными

    кавычками, на которые айс шибко ругается
     
  4. Sergey_R

    Sergey_R Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    138
    n2k



    А не прав в чем? В описании работы команды 'G'?



    Вот тебе более подробный лог практически твоего макроса. (Для наглядности добавлена команда 'r -d'.)
    Код (Text):
    1. :macro xxx ="bpm eip x do \"g; r -d; t; bc bpindex; xxx;\""
    2. Macro: 'xxx' defined
    3. :xxx
    4. :g
    5. Break due to BP 00: BPMB 0008:F8818C7E X DR0 DO "g; r -d; t; bc bpindex; xxx;"
    6.     (ET=13.64 microseconds)
    7. Break due to BP 00: BPMB 0008:F8818C7E X DR0 DO "g; r -d; t; bc bpindex; xxx;"
    8.     (ET=60.81 microseconds)
    9. ...


    Как видишь, никаких регистров и никакого перемещения контрольной точки. Бесконечный цикл был остановлен по Ctrl-D и тут!...
    Код (Text):
    1. ...
    2. :bd 0
    3. CS:EIP=0008:F8818C7E  SS:ESP=0010:8053E438
    4. EAX=C12F931E  EBX=00000000  ECX=FFDFFC70  EDX=0000034A
    5. ESI=821B81F0  EDI=00000000  EBP=8053E450  EFL=00000202
    6. DS=0023  ES=0023  FS=0030  GS=0000
    7. Symbol not defined (t)
    8. Symbol not defined (t)
    9. Break due to BP 00: BPMB 0008:F8818C80 X DR0 DO "g; r -d; t; bc bpindex; xxx;"
    10.     (ET=14.56 microseconds)
    11. Break due to BP 00: BPMB 0008:F8818C80 X DR0 DO "g; r -d; t; bc bpindex; xxx;"
    12.     (ET=18.56 microseconds)
    13. ...
    Точка была отключена ('bd 0'), а по возвращении в SI макрос продолжил работать дальше. (Все правильно - ведь выполнение команды 'G' было завершено!) Тут тебе и вывод содержимого регистров и смена адреса контрольной точки ('BPMB 0008:F8818C80 ...'). (Не могу сказать, что означает в данном случае "Symbol not defined (t)". Возможно, какие-то обрывки с клавиатуры или из макроса.) Ну а дальше опять пошел бесконечный цикл...





    Я не очень понимаю твою задачу, но попробуй такой вариант - перемести g; в конец строки макроса:
    Код (Text):
    1. :MACRO xxx = "bpm eip x do \"t;r -d;bc bpindex; xxx;g;\""
    2. Macro: 'xxx' defined
    3. :xxx
    4. :g
    5. Break due to BP 00: BPMB 0008:806B9C04 X DR0 DO "t;r -d;bc bpindex; xxx;g;"
    6.     (ET=2.24 microseconds)
    7. CS:EIP=0008:806B9C09  SS:ESP=0010:F8962D30
    8. EAX=F87DFC00  EBX=00000000  ECX=F87DFC70  EDX=DDA89652
    9. ESI=8232F200  EDI=0000002C  EBP=F8962D50  EFL=00000082
    10. DS=0023  ES=0023  FS=0030  GS=0000
    11. Break due to BP 00: BPMB 0008:806B9C09 X DR0 DO "t;r -d;bc bpindex; xxx;g;"
    12.     (ET=2.26 microseconds)
    13. CS:EIP=0008:806B9C0B  SS:ESP=0010:F8962D30
    14. EAX=3CF78000  EBX=00000000  ECX=F87DFC70  EDX=00000C2E
    15. ESI=8232F200  EDI=0000002C  EBP=F8962D50  EFL=00000246
    16. DS=0023  ES=0023  FS=0030  GS=0000
    17. Break due to BP 00: BPMB 0008:806B9C0B X DR0 DO "t;r -d;bc bpindex; xxx;g;"
    18.     (ET=2.27 microseconds)
    19. CS:EIP=0008:806B9C0D  SS:ESP=0010:F8962D30
    20. EAX=3CF78000  EBX=00000000  ECX=F87DFC70  EDX=00000C2E
    21. ESI=8232F200  EDI=0000002C  EBP=F8962D50  EFL=00000246
    22. DS=0023  ES=0023  FS=0030  GS=0000
    23. ...


    В таком виде макрос делает и переход на следующую команду и переустановку контрольной точки.







    А что с ними не так?