VMWare, удаленная отладка. Чем? Как?

Тема в разделе "WASM.BEGINNERS", создана пользователем Vitamant, 10 дек 2011.

  1. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    Доброго времени суток!

    Дебагингом занимаюсь совсем недавно. Первый опыт оказался более чем успешным, и сама отладка проблем не вызывает. К сожалению, столкнулся с неприятной проблемой - приложение (игруха) использует DirectDraw, разрешение 640х480 и 8-бит цвета. Убрал флажок TOP_MOST и она начала сворачиваться по Win+D (и только по нему) при достижении бряков. Это одноразовая операция, развернуть ее после уже не получается. Любое перемещение окна (в том числе в момент создания) или его размеров приводит к черному экрану (но игуха работает). В довершении всего, брякнуть дебагер нужно вручную в определенный момент. Бряки на вызов функций, память и ручная отладка не помогут.

    Это что касается грустного.

    Теперь совсем грустное:

    Решил приконектиться удаленным отладчиком. Кандидата была два - IDA и WinDbg. Первая приконектилась, но нарисовала аж пять каких-то нитей. Одна всегда висит в районе чего-то монстроузного:

    Код (Text):
    1. ntdll.dll:7C95211C ntdll_DbgUiRemoteBreakin:
    2. ntdll.dll:7C95211C push 8
    3. ntdll.dll:7C95211E push offset unk_7C952168
    4. ntdll.dll:7C952123 call near ptr unk_7C90E8CB
    5. ntdll.dll:7C952128 mov eax, large fs:18h
    6. ntdll.dll:7C95212E mov eax, [eax+30h]
    7. ntdll.dll:7C952131 cmp byte ptr [eax+2], 0
    8. ntdll.dll:7C952135 jnz short loc_7C952140
    9. ntdll.dll:7C952137 test byte_7FFE02D4, 2
    10. ntdll.dll:7C95213E jz short loc_7C952160
    11. ntdll.dll:7C952140
    12. ntdll.dll:7C952140 loc_7C952140: ; CODE XREF: ntdll.dll:ntdll_DbgUiRemoteBreakin+19j
    Оставшиеся:
    Код (Text):
    1. ntdll.dll:7C90E514 ntdll_KiFastSystemCallRet:
    2. ntdll.dll:7C90E514 retn
    В стеках:
    Код (Text):
    1. Первая нить:
    2. 0012FD9C 77F30E29 gdi32.dll:gdi32_DdEntry26+C
    3. 0012FDA0 77F30E12 gdi32.dll:gdi32_DdEntry31+40
    4. 0012FDA4 56400002
    5. 0012FDA8 56400004
    6. 0012FDAC 00000000
    7. 0012FDB0 00000000
    8. 0012FDB4 0012FE64 Stack[00000560]:0012FE64
    9. 0012FDB8 0014AEA8 debug007:0014AEA8
    10. 0012FDBC 00000000
    11.  
    12. Вторая нить:
    13. 00E4FED0 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C
    14. 00E4FED4 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86
    15. 00E4FED8 00000002
    16. 00E4FEDC 00E4FEF8 debug041:00E4FEF8
    17. 00E4FEE0 00000001
    18. 00E4FEE4 00000000
    19. 00E4FEE8 00000000
    20. 00E4FEEC 0014F000 debug025:0014F000
    21.  
    22. Третья нить:
    23. 0104FD88 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C
    24. 0104FD8C 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86
    25. 0104FD90 00000040
    26. 0104FD94 001579A0 debug026:001579A0
    27. 0104FD98 00000001
    28. 0104FD9C 00000000
    29. 0104FDA0 00000000
    30. 0104FDA4 00000000
    31. 0104FDA8 00000040
    32.  
    33. Четвертая нить:
    34. 0114FD90 7C90DF4A ntdll.dll:ntdll_ZwWaitForMultipleObjects+C
    35. 0114FD94 7C809590 kernel32.dll:kernel32_CreateFileMappingA+86
    36. 0114FD98 00000001
    37. 0114FD9C 0114FDB8 debug046:0114FDB8
    38. 0114FDA0 00000001
    39. 0114FDA4 00000000
    40. 0114FDA8 0114FDEC debug046:0114FDEC
    41. 0114FDAC 00000000
    42.  
    43. Пятая нить:
    44. 00AFFFF8 00000000
    45. 00AFFFFC 00000000
    46. 00B00000 BA468C55
    47. 00B00004 4FB19956
    48. 00B00008 A7529DA5
    49. 00B0000C AAC67CDD
    50. 00B00010 0DABC3D1
    51. 00B00014 00000000
    Я новичок и мне это совершенно ничего не говорит. (Но данные отображаются верно, регистры тоже, пуск\пауза\стоп работают)

    Далее попытался подключиться WinDbg'ером. Тут все еще хуже. Lan меня послал, сказав, что сие возможно только для x86-систем (а у меня основная х64). По com как подключиться - не ясно.
    Наткнулся на эту вот тему:
    http://www.wasm.ru/forum/viewtopic.php?id=30350
    (а заодно и на этот форум) перепробовал всё. Увы - тишина покой.

    kdsrv.exe на виртуалке запускал. Из-под батника он в процеесах даже не появляется. Из консоли - запускается молча, молча висит.
    Далее, windbg'ром пытаюсь коннктиться. Всегда пишет одно и тоже:
    Люди добрые-знающие, помогите кто чем может! :)

    На данный момент мой идеал OlyDbg. Если можно натравить его на сеть - было бы здорово! Нельзя - подойдет любой другой дебаггер хотя бы отдаленно его напоминающий. Та же IDA, то же WinDbg.

    В распоряжении имею комп с ОС Windows 7 x64. COM-портов естественно нет.
    VMWare Workstation 8. На ней - Windows XP х86 и отлаживаемая программа.
    В настройках виртуалки:
    Serial Port - Use named pipe "\\.\pipe\com_1" - The end is the server - The other end is an application

    Буду благодарен за любую помощь! Спасибо! :)
     
  2. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    syser попробуй. он правда ремот не держит, но на варе по хоткеям брякнет систему.

    для виндбг делаем ярлык
    C:\WinDDK\7600.16385.1\Debuggers\windbg.exe -k com:pipe,port=\\.\pipe\com_1

    а еще для ремоута нужно сами винь отконфигурить, т.е. в c:\\boot.ini
    т.е. копипастим оригинальную запись и добавляем
    /DEBUG /DEBUGPORT=COM2 /BAUDRATE=115200

    потом во время загрузки будет предоставлен выбор...
     
  3. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    Большое спасибо! Попробую!
    Пока мучался, обнаружил, что и Oly хоткеями брякает. К сожалению не помогло. Отладка упирается в странную функцию, которая пропускает нулевые символы, а ненулевые пишет в область памяти, находящуюся за границами секций. При обычном выполнении это игнорируется, но стоит остановить отладку, а затем запустить - падает с AccessViolation и Shift+Click не помогает (или помогает, но там в любом случае несколько тысяч итераций).
     
  4. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    Увы. Не помогло. Тоже самое:
    kdsrv.exe на виртуалке запускать не нужно?
    На всякий случай, попробовал запустить:
    kdsrv.exe -t npipe:pipe=\\.\pipe\com_1

    Тоже самое.
     
  5. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    на виртуалке ничего не нужно делать помимо как настроить загрузчику под дебаг. В самой варе нужно создать порт ну и указать что юзаем неймед пайп (\\.\pipe\com_1)
    У себя на машине поставить виндбг и запустить его с параметрами (указал в пред посте). Запускаем варю, там выбираем вариант загрузки виндоса - "под отладкой", рас,два - двойной клик по иконке с аргументами для виндбг.
    = все, мы поехали (должны по крайней мере)

    *мож сюсером попробуете, он не такой набаганый как виндбг)
     
  6. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    Порт создан. Виндбг поставлен. Варю запустил. В отладочном режиме систему запустил. Виндбг с параметрами запустил.
    =
    =\\\

    Сайсером попробую.
     
  7. Kaimi

    Kaimi Андрей

    Публикаций:
    0
    Регистрация:
    15 апр 2010
    Сообщения:
    120
  8. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    О! Еще один мануал! И снова что-то новенькое. :lol:
    Вот про это в прежнеих ни слова не было сказано. :)

    Спасибо! Попробую. Правда, опять же там VMWare какая-то старенькая. У меня - 8ка. Может, она глючит. Но в любом случае - попытаюсь.
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    А ты чего ожидал. Сейчас все игры многопоточные и никуда ты от этого не уйдешь.
    По поводу удаленной отладки: ты похоже плохо понимаешь механизм ее работы. И неправильно настраиваешь из-за этого.
    В инструкции с ufiles.org упущен важный момент: не зря там про F8 сказано - нужно грузить систему с включенным режимом отладки и первый бряк будет еще далеко до входа в систему(по-моему режим просто включается ключом /debug). Ну и ASMatic почему-то в своемпосте написал com2, хотя у тебя везде com1

    И ты напрасно роешь в сторону kd - это kernel debug, отладка ядра Винды. До приложений ты оттуда по-моему не доберешься.
    Для отладки приложений не надо морочится с com-портами, уже давно реализован интерфейс взаимодействия по сети. Ищи по слову TCP и будет тебе счастье. Ну еще помучишься слегка с настройкой сети в VmWare, но по-моему давно уже есть нормальные мануалы .
     
  10. Vitamant

    Vitamant New Member

    Публикаций:
    0
    Регистрация:
    10 дек 2011
    Сообщения:
    9
    valterg
    Увы, нормальных мануалов не обнаружил. TCP на выходных погуглю. Сейчас - да. Но эта старая (2000г) вполне себе однопоточная игра. Спасибо за разъяснение насчет kd! :)