Добрый вечер. Хочу сразу попросить не стебаться и не угрожать баном Я сей час изучаю языки программирования и паралельно архитекту Windows NT. В дальнейшем хочу заниматься разработкой драйверов для Windows. Так вот. Подскажите пожалуйста, какие знания нужны. И конкретно интересует ассемблер. Как часто его приходится использовать, если драйвера планирую писать на С? Только для вставок в самых необходимых местах? Или же прийдется отлаживать драйвер(простите за такой глупый вопрос, я учил С++ и к отладчику еще не привык)? Какой уровень знаний ассемблера понадобится? У меня книга Калашникова. И для чего он еще используется при разработке драйверов? Спасибо.
bug1z > Я сей час изучаю языки программирования > и паралельно архитекту Windows NT. > В дальнейшем хочу заниматься разработкой > драйверов для Windows. каких драйверов? они же очень разные и сказать "я занимаюсь программированием драйверов" это примерно тоже самое, что "я занимаюсь программированием". драйвер файервола и драйвер виртуального диска это как бы очень разные драйвера, не говоря уже о драйверах для управления своим собственным железом (ну мало ли... вдруг вы разработате свою PCI плату какую) > Так вот. Подскажите пожалуйста, какие знания нужны. чтобы писать драйвера нужны очень обширные знания из самых разных областей и тут наблюдается точно такая же специализация как и у прикладных программистов. "я хочу писать программы -- какие знания нужны?". гм. проще сказать какие знания скорее всего будут не нужны. математика навряд ли потребуется (что там вычислять в драйверах?), а вот алгоритмизация -- очень даже рулит. это вам не прикладной уровень, где под каждый чих (например, дерево или разряженный массив) можно найти библиотеку. на драйверах такие вещи приходится писать самостоятельно, т.к. на использование сторонних библиотек наложено слишком много ограничений. > И конкретно интересует ассемблер. Как часто его приходится > использовать, если драйвера планирую писать на С? опять-таки зависит от драйверов. теоритически и писать, и отлаживать можно на си, практически же, асм нужно знать хотя бы для отладки. > Только для вставок в самых необходимых местах? > Или же прийдется отлаживать драйвер(простите за > такой глупый вопрос, я учил С++ и к отладчику еще не привык)? зачем вам отладчик? о времена, о нравы. о молодежь! отладочная печать + мозги рулит. отладчиком я сам лично пользуюсь оччччень редко, ибо без надобности. > Какой уровень знаний ассемблера понадобится? У меня книга Калашникова. асм в драйверах это не самое сложное. я бы сказал это даже самое простое.
Согласен, даже если разработка будет вестись на C, то хотя бы минимально нужно знать ассемблер на уровне уверенного чтения листинга. Это будет необходимо для того, что бы при возникновении BSOD’а во внутренностях системы, особенно когда в call-стеке нет твоей дравины, можно было разобраться в причинах: к чему обращается сторонний код, при каких условиях и т.п.
kaspersky Не знаю даже как правильно выразиться. Системных, тоесть скажем что то типа контролирования загрузки/выгрузки драйвера из системы и тому подобное. Программировать железо пока что в планах нету -- Боюсь сказать глупость, так как не разбираюсь пока что в этом. Но кто то здесь говорил, что С программист не справится с анализом так называемого "крэш-дампа", что там нужно очень хорошо знать ассемблер. Так же читал на одном из форумов, что при разработке драйвера на пути встречается очень много бсодов и без отладчика не разобраться в чем проблема. --
0x6b65 > Это будет необходимо для того, что бы при возникновении BSOD’а BSOD это не самое страшное. если есть сорцы, то можно отлаживать на уровне сорцов. а вот если системный вызов ведет себя странно, то тут приходится отдаживать саму систему, а к ней исходные коды не прилагаются. bug1z > Не знаю даже как правильно выразиться. Системных, а бывают что ли не системные драйвера? > Боюсь сказать глупость, так как не разбираюсь пока что в этом. > Но кто то здесь говорил, что С программист не справится с анализом > так называемого "крэш-дампа", что там нужно очень хорошо > знать ассемблер. это утверждение на 90% относится к анализу дампов, получаенных на стороне юзера, т.к. у него версия без отладочной инфы. на своей машине можно обойтись и без знания асма, хотя это будет сурово > Так же читал на одном из форумов, что при разработке драйвера > на пути встречается очень много бсодов и без отладчика > не разобраться в чем проблема. без отладочной печати. бсод это предохранительный клапан. или даже нет. это как подушка безопасности. бсод редко возникает в месте непосредственной ошибки и до ошибки еще копать и копать.
Ну вот я и говорю, что не знаю как выразиться Драйвера для работы с системой в общем. И вот еще такой вопрос. Что лучше перед Руссиновичем почитать? Вот какой список я составил: 0. С (чтобы писать код) 1. Assembler (чтобы можно было разбираться в листингах) 2. Рихтер "Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows" 3. Руссиновчи "Внутренее устройство Windows" 4. Статьи Four-F и паралельно Солдатов - "Программирование драйверов Windows" Что я упускаю?
bug1z Без ассемблера вы не сможите понять архитектуру оси. Большинство пишут драйвера по шаблонам, не понимая сути механизмов и принципов работы.
Clerk, Я уже начал учить ассемблер. По книге Калашникова, так как для начала она показалась мне наиболее понятной. После нее пока что не знаю, либо Юрова, либо Абеля. Может вы подскажите? wsd, спасибо. Добавил в список.
bug1z Могу дать вам хороший способ изучить ассемблер. Открываете отладчиком модуль и трассируете код в уме, также как это делает отладчик. Если возникает проблема смотрите в манах. Параллельно изучаете все не понятные нюансы, тоесть например видите mov dword ptr ds:[eax],XXXX и разбираетесь с сегментацией(~Ds).
Спасибо за совет, Clerk. А так же всем отписавшимся. -- Надеюсь, эти пару лет не уйдут напрасно -- Тему прошу не закрывать, возможно еще вопросы появятся. -- Спасибо.
Учись работать в отладчике, как научишься сможешь побыстрому освоить ассемблер. Юров активно практикует в использование TD для отладки всех примеров в книге - что очень правильно, набрал код->посмотрел как работает в отладчике->закрепил. Отладчик - значит Олька из дизасма Ида+ХексРейс. Сейчас юзаю Syser для отладки в ядре, трёх тулз хватит. По мне так ассемблер полегче будет чем перл, питон, руби, последние дались мне с трудом. Огроменный вклад в создание драйверов на ассемблере внес Four-F, когда перевел туеву хучу заголовочных файлов и написал доступным языком книжку по созданию драйверов под masm32 Из Солдатова понравился только справочник терминов, Сорокину только листал, но тоже не особо, основной источник информации OSR Online + DDK
JCronuz о, да! отладчик! я тоже помню учил асм в дебаггере, ибо так намного нагляднее. именно потому у меня стек растет вверх еще бы порекомендовал асм-вставки. в отличии от чистого асма тут мы имеем работающий ввод/вывод. например, мы хотим, написать программу, которая заполняет массив циклическим 01234567. и мы пишем: #include <stdio.h> #define XXL 69 char buf[XXL]; main() { __asm{ mov edi, offset buf mov ecx, XXL xor ebx,ebx A1: lea eax, [ebx + '0'] stosb inc ebx and ebx,7 loop A1 } printf("%s\n", buf); } на чистом асме мы бы много отвлекались на посторонние вещи. и было бы сложнее начать. а так -- у нас легкий старт
bug1z асм не нужно учить по книжкам. можно, но не обязательно. как уже сказали, просто берете отладчик и отлаживаете на здоровье. но если вы ещё не знаете базовых команд, то скачайте просто справочник по командам и прерываниям. справочник я приложил. Отредактировано:не привинчивается файл. ищи в гугле. мой называется helppc.
Зачем усложнять? Этот код можно заменить более коротким и понятным mov al,'0' A1: stosb inc eax and al,37h loop a1
Да, так оно и есть. Но говорили, что лучше начать с ассемблера под DOS, а потом перейти на 32-битный под Windows.