Dmitry_177
Участник
Offline
|
|
« : 30-06-2007 20:06 » |
|
Привет всем! Подскажите пожалуйста как отлаживать драйвер в Soft-ICE? Написал я небольшой драйвер, а при его использовании выскакивает BSOD.. Хотел бы поотлаживать его, посмотреть на какой строке выскакивает BSOD и т.д.. Как можно сделать так, чтобы в Soft-ICE отображался не ассемблерный код, а на C, на котором он и написан? И еще не очень понятно как увидеть свой драйвер в окне Soft-ICE, нажимаю Ctl+D, и что дальше не понятно..
в общем делаю так: в Symbol Loader открываю файл драйвера, и при загрузке у меня спрашиваются файлы gs_support.c и потом еще secchk.c, которых у меня нету в проектах.. вот никак не пойму что это за файлы такие?
|
|
|
Записан
|
|
|
|
lexer666
Гость
|
|
« Ответ #1 : 30-06-2007 22:12 » |
|
Как можно сделать так, чтобы в Soft-ICE отображался не ассемблерный код, а на C, на котором он и написан? Отладчики при всем желании си-код не покажут , только дизассемблированный.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #2 : 01-07-2007 03:50 » |
|
lexer666, нет, почему, например а в VC6 показывается и СИ и асм код
|
|
|
Записан
|
|
|
|
lexer666
Гость
|
|
« Ответ #3 : 01-07-2007 07:52 » |
|
да, да..что-то меня торкнуло ночью если только бинарник, то не покажет )
|
|
|
Записан
|
|
|
|
Dmitry_177
Участник
Offline
|
|
« Ответ #4 : 01-07-2007 08:52 » |
|
В Солдатове написано же что можно видеть в Soft-ICE код на Си.. Нужно только как-то в Symbol Loader-е загрузить драйвер(отладочный)
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #5 : 02-07-2007 12:23 » |
|
lexer666, не вводи людей в заблужление) 1. сишный код МОЖНО увидеть в софтайсе. (правда кирилицу не смог настроить, но это мелочи) софтайс это такой же отладчик как и отладчик студии) и умеет все то же, только немного больше) 2. Ctrl+D - показывает текущую команду текущего потока. необязательно что он будет ваш в произвольный момент времени)
1. как заставить софт айс увидеть сишный код. для этого существует символ-лоадер (а вы что думали?) к сожалению - моя новая видеокарта софайсом не поддерживается, поэтому давно в нем не работал, да и нужны уже не возникает. короче. я не помню всех настроек компилятора и линкера, я тут выкладывал настройки студии - дебаговый варинат подойдет. повторюсь. компилятор: /Oi /G6 /I "C:\DDK\XP2600.1106\inc\wxp" /I "C:\DDK\XP2600.1106\inc\ddk\wxp" /I "C:\DDK\XP2600.1106\inc\crt" /D "DBG=1" /D "_DEBUG" /D "_WINDOWS_" /D "WIN32" /D "_X86_=1" /D "i386=1" /D "STD_CALL" /D "CONDITION_HANDLING=1" /D "NT_UP=1" /D "NT_INST=0" /D "WIN32=100" /D "_NT1X_=100" /D "WINNT=1" /D "_WIN32_WINNT=0x0400" /D "_WIN32_IE=0x0400" /D "WIN32_LEAN_AND_MEAN=1" /D "DEVL=1" /D "FPO=0" /D "_DLL=1" /D "DRIVER" /D "_XP2600_SYS_DRIVER_" /D "_WIN2K_COMPAT_SLIST_USAGE" /D "_WINDLL" /X /GF /FD /EHsc /ML /FAs /Fa".\Debug_WinXP2600/" /Fo".\Debug_WinXP2600/" /Fd".\Debug_WinXP2600/" /FR".\Debug_WinXP2600/" /W3 /nologo /c /Zi /Gz /Zel /QIfdiv- /QIf /QI0f -cbstring помоему отсюда важно было -cbstring /c /Zi ... может еще что то.
линкер: /OUT:"Debug_WINXP2600\namedrv.sys" /VERSION:2.2 /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\DDK\XP2600.1106\lib\wxp\i386" /DLL /NODEFAULTLIB /PDB:".\Debug_WinXP2600/namedrv.pdb" /MAP:".\Debug_WinXP2600/namedrv.map" /STACK:262144,4096 /OPT:REF /OPT:ICF /ENTRY:"DriverEntry@8" /BASE:"0x10000" /MERGE:".rdata=.text" ntoskrnl.lib hal.lib wmilib.lib /DRIVER /debug:FULL /subsystem:native,1.10 /SECTION:INIT,d /OPT:REF /OPT:ICF /osversion:5.00 /IGNORE:4001,4037,4039,4065,4070,4078,4087,4089,4096 из этого помоему нобходмо было /debug:FULL /OPT:REF /OPT:ICF
далее.... девайс лоадер(софтайсовский) должен знать что где лежит в частности для какого драйвера какие БД кода грузить. сущесутет два пути: 1 драйвер загружаем сами руками(CreateFile) в этом случае перед загрузкой необходимо запустить символлоадер, открыть нужный драйвер, потом нажать кропочки "транслейт" потом "лоадсимволс". да, перед этим! включить следующее "транслейт символс энд Соурсес" "промпт фор соурсес" и "Лоад символс онли" извиняйте что кирилицей - лениво раскладкой щелкать) так вот. включили, нажали транслейт - должен найти все исходные коды и скомпилить файл *.nms (без ошибок) если ошибки - смотрите ключи компиляции, мог где то наврать - уже не помню. дажее нажали "лоад символс" - он ентот полученный файл засосал в софт айс. из айса кстати можно его проконтроллировать... но не помню какая команда список загруженных nms файлов показывает. читайте мануалы.
2. путь второй. если вам надо отладить при запуске винды - что там по PNP с вашим творением делается. тогда примерно так же получаем файл *.nms а вот далее идем в настройки софтайса и куда то его там прописываем (точно не помню - но там сразу понятно). в этом случае он файл nms глузит при своем запуске, перед запуском винды.(перезагрузится надо будет) в общем вам наверное первый путь подойдет.
и третье. как посмотреть по шагам выполнение драйвера. в начале интересующего фрагмента кода драйвера ставите _asm int 3; (или _asm int 1;) это так называемые брекпоинты. впринципе для них макросы есть, но я их не юзал. а вообще это два программных прерывания, которые все отладчики подчит используют. VS кажись узает int 1. для драйверов чаще используется int 3 - его и рекомендую. далее. по умолчанию софтайс на эти прерывания не обращает внимания. чтоб он делал на них бреки надо включить: команды софтайса SET I3HERE ON (SET I1HERE ON соответственно) или OFF когда не надо. а то начнет брякпоинты всех VS проэктов ловить раньше отладчика VS)))
короче выполняется драйвер, доходит до команды int 3. вылетает любимое окошко софтайса. С СИШНЫМ КОДОМ если все правильно сделали. а далее там F5-F6-F7-F9.... опять же головой не помню, читайте мануалы. и вообще читайте мануалы... полезно иногда) вот)
PS нифига се написал.....
ЗЗЫ да! еще в софтайсе используйте faults on - оч полезная команда. в этом случае софтайс брячится на всех ошибках ядра (и не только). это либо в софтайсе набрать, либо в строке его инициализации прописать через настройку.
PPPS до кучи полезные команды BPX и прочие BP___... читайте хелп. умеет брячится аппаратно по обращению R/O по произвольному адресу. умеет аппаратно I/O отлавливать. умеет бряки по условиям и по счетчикам делать. можно бряки по именам функций ставить (при условии что список имен есть) по ядровым например BPX CreateFile - будет все обращения к файлам брячить)
|
|
« Последнее редактирование: 02-07-2007 12:35 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Vlaor
Гость
|
|
« Ответ #6 : 03-07-2007 16:54 » |
|
Не понимаю какие сложности. В DDK компилишь checked version и softice подхватывает все без каких либо заморочек. Заодно можно breakpoint ставить по имени функций, и watch тоже пользовать. Кстати, Ochkarik у меня тоже были проблемы с видео, так я включил оконный режим и все заработало.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #7 : 04-07-2007 11:30 » |
|
Vlaor, как раз вопрос зачем такие сложности чтобы компилить через мейк-файл DDK а не проект в студии) не люблю мейк-файлы - там дефенишинов... и непонятно кто за что отвечает и что в итоге будет) он же размером под сто килобайт))) а сложностей нет. просто проект настроить и все) это на бумаге так страшно, на самом деле просто пяток ключиков компилятора/линкера поставить правильно и больше об этом не вспоминать... и "заодно" возможность установки брекпоинтов к способу компиляции не относится)
вот... а насчет видео... я как раз всегда так и пользовался, через универсальный драйвер- так удобнее, строк на экране больше помещается) а на новой карте как ни бился, ctrl+d нажимаю - экран гаснет, монитор выключается. наживаю второй раз - выходит из айса, экран опять включается и все показывает. даже команды все айс понимает, если в слепую набивать) раньше карта AGP была... NVidia кажется. сейчас pci-express NVidia GeForce PCX 5750
|
|
« Последнее редактирование: 04-07-2007 11:32 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Vlaor
Гость
|
|
« Ответ #8 : 04-07-2007 17:10 » |
|
Ochkarik Ну если конечно сильно разбираться с конкретными настройками make для каждого проекта то да. Я например makefile даже и не редактировал. А про break это так ...
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #9 : 05-07-2007 08:28 » |
|
не знаю... когда первый драйвер компилил у меня только DDK и софтайс был) а все остальные driverWizad-ы только с классами работали, хорошо что я эту идею сразу... поэтому было два варианта, либо разбираться с огромным мейком по примерам DDK, либо с настройками)) с настройками оказалось разобраться проще, чес слово)))
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Vlaor
Гость
|
|
« Ответ #10 : 05-07-2007 09:31 » |
|
Очень хорошая штучка еще у Numega. Встраивается в VC как отдельная панель и модно компилить и редактировать прям там. А так я тоже поставил DDK (с VC), написал код , а make: # Файл Makefile # # DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the driver components of the Windows NT DDK #
!INCLUDE $(NTMAKEENV)\makefile.def
Проблем не испытал, да и SoftIce сразу заработал . Да подобный make в любой литре вроде имеется.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #11 : 05-07-2007 10:14 » |
|
хм. а что значит софт айс соразу заработал?) он что до этого не работал что ли?)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
Vlaor
Гость
|
|
« Ответ #12 : 06-07-2007 14:33 » |
|
В смысле как проставил, так и заработал. То бишь без проблем.
|
|
|
Записан
|
|
|
|
|