Assembler в драйверо-писательной практике

Тема в разделе "WASM.HEAP", создана пользователем bug1z, 28 июл 2010.

  1. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Добрый вечер.
    Хочу сразу попросить не стебаться и не угрожать баном :)

    Я сей час изучаю языки программирования и паралельно архитекту Windows NT.
    В дальнейшем хочу заниматься разработкой драйверов для Windows.

    Так вот. Подскажите пожалуйста, какие знания нужны. И конкретно интересует ассемблер. Как часто его приходится использовать, если драйвера планирую писать на С?

    Только для вставок в самых необходимых местах? Или же прийдется отлаживать драйвер(простите за такой глупый вопрос, я учил С++ и к отладчику еще не привык)?

    Какой уровень знаний ассемблера понадобится? У меня книга Калашникова.

    И для чего он еще используется при разработке драйверов?

    Спасибо.
     
  2. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    bug1z
    > Я сей час изучаю языки программирования
    > и паралельно архитекту Windows NT.
    > В дальнейшем хочу заниматься разработкой
    > драйверов для Windows.
    каких драйверов? они же очень разные и сказать "я занимаюсь программированием драйверов" это примерно тоже самое, что "я занимаюсь программированием". драйвер файервола и драйвер виртуального диска это как бы очень разные драйвера, не говоря уже о драйверах для управления своим собственным железом (ну мало ли... вдруг вы разработате свою PCI плату какую)

    > Так вот. Подскажите пожалуйста, какие знания нужны.
    чтобы писать драйвера нужны очень обширные знания из самых разных областей и тут наблюдается точно такая же специализация как и у прикладных программистов. "я хочу писать программы -- какие знания нужны?". гм. проще сказать какие знания скорее всего будут не нужны. математика навряд ли потребуется (что там вычислять в драйверах?), а вот алгоритмизация -- очень даже рулит. это вам не прикладной уровень, где под каждый чих (например, дерево или разряженный массив) можно найти библиотеку. на драйверах такие вещи приходится писать самостоятельно, т.к. на использование сторонних библиотек наложено слишком много ограничений.

    > И конкретно интересует ассемблер. Как часто его приходится
    > использовать, если драйвера планирую писать на С?
    опять-таки зависит от драйверов. теоритически и писать, и отлаживать можно на си, практически же, асм нужно знать хотя бы для отладки.

    > Только для вставок в самых необходимых местах?
    > Или же прийдется отлаживать драйвер(простите за
    > такой глупый вопрос, я учил С++ и к отладчику еще не привык)?
    зачем вам отладчик? о времена, о нравы. о молодежь! отладочная печать + мозги рулит. отладчиком я сам лично пользуюсь оччччень редко, ибо без надобности.

    > Какой уровень знаний ассемблера понадобится? У меня книга Калашникова.
    асм в драйверах это не самое сложное. я бы сказал это даже самое простое.
     
  3. 0x6b65

    0x6b65 Забанен

    Публикаций:
    0
    Регистрация:
    8 окт 2009
    Сообщения:
    92
    Согласен, даже если разработка будет вестись на C, то хотя бы минимально нужно знать ассемблер на уровне уверенного чтения листинга. Это будет необходимо для того, что бы при возникновении BSOD’а во внутренностях системы, особенно когда в call-стеке нет твоей дравины, можно было разобраться в причинах: к чему обращается сторонний код, при каких условиях и т.п.
     
  4. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    kaspersky
    Не знаю даже как правильно выразиться. Системных, тоесть скажем что то типа контролирования загрузки/выгрузки драйвера из системы и тому подобное. Программировать железо пока что в планах нету :)
    --
    Боюсь сказать глупость, так как не разбираюсь пока что в этом. Но кто то здесь говорил, что С программист не справится с анализом так называемого "крэш-дампа", что там нужно очень хорошо знать ассемблер. Так же читал на одном из форумов, что при разработке драйвера на пути встречается очень много бсодов и без отладчика не разобраться в чем проблема.
    --
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    0x6b65
    > Это будет необходимо для того, что бы при возникновении BSOD’а
    BSOD это не самое страшное. если есть сорцы, то можно отлаживать на уровне сорцов. а вот если системный вызов ведет себя странно, то тут приходится отдаживать саму систему, а к ней исходные коды не прилагаются.

    bug1z
    > Не знаю даже как правильно выразиться. Системных,
    а бывают что ли не системные драйвера? ;)

    > Боюсь сказать глупость, так как не разбираюсь пока что в этом.
    > Но кто то здесь говорил, что С программист не справится с анализом
    > так называемого "крэш-дампа", что там нужно очень хорошо
    > знать ассемблер.
    это утверждение на 90% относится к анализу дампов, получаенных на стороне юзера, т.к. у него версия без отладочной инфы. на своей машине можно обойтись и без знания асма, хотя это будет сурово

    > Так же читал на одном из форумов, что при разработке драйвера
    > на пути встречается очень много бсодов и без отладчика
    > не разобраться в чем проблема.
    без отладочной печати. бсод это предохранительный клапан. или даже нет. это как подушка безопасности. бсод редко возникает в месте непосредственной ошибки и до ошибки еще копать и копать.
     
  6. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Ну вот я и говорю, что не знаю как выразиться :)
    Драйвера для работы с системой в общем.

    И вот еще такой вопрос. Что лучше перед Руссиновичем почитать?
    Вот какой список я составил:

    0. С (чтобы писать код)
    1. Assembler (чтобы можно было разбираться в листингах)
    2. Рихтер "Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows"
    3. Руссиновчи "Внутренее устройство Windows"
    4. Статьи Four-F и паралельно Солдатов - "Программирование драйверов Windows"

    Что я упускаю?
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    bug1z
    4. Статьи Four-F и Уолтер Онни
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bug1z
    Без ассемблера вы не сможите понять архитектуру оси. Большинство пишут драйвера по шаблонам, не понимая сути механизмов и принципов работы.
     
  9. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Clerk,
    Я уже начал учить ассемблер. По книге Калашникова, так как для начала она показалась мне наиболее понятной. После нее пока что не знаю, либо Юрова, либо Абеля. Может вы подскажите?

    wsd, спасибо. Добавил в список.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    bug1z
    Могу дать вам хороший способ изучить ассемблер. Открываете отладчиком модуль и трассируете код в уме, также как это делает отладчик. Если возникает проблема смотрите в манах. Параллельно изучаете все не понятные нюансы, тоесть например видите mov dword ptr ds:[eax],XXXX и разбираетесь с сегментацией(~Ds).
     
  11. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Спасибо за совет, Clerk.
    А так же всем отписавшимся.
    --
    Надеюсь, эти пару лет не уйдут напрасно :)
    --
    Тему прошу не закрывать, возможно еще вопросы появятся.
    --
    Спасибо.
     
  12. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Учись работать в отладчике, как научишься сможешь побыстрому освоить ассемблер. Юров активно практикует в использование TD для отладки всех примеров в книге - что очень правильно, набрал код->посмотрел как работает в отладчике->закрепил. Отладчик - значит Олька из дизасма Ида+ХексРейс. Сейчас юзаю Syser для отладки в ядре, трёх тулз хватит. По мне так ассемблер полегче будет чем перл, питон, руби, последние дались мне с трудом.

    Огроменный вклад в создание драйверов на ассемблере внес Four-F, когда перевел туеву хучу заголовочных файлов и написал доступным языком книжку по созданию драйверов под masm32

    Из Солдатова понравился только справочник терминов, Сорокину только листал, но тоже не особо, основной источник информации OSR Online + DDK
     
  13. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    JCronuz
    о, да! отладчик! я тоже помню учил асм в дебаггере, ибо так намного нагляднее. именно потому у меня стек растет вверх :derisive:

    еще бы порекомендовал асм-вставки. в отличии от чистого асма тут мы имеем работающий ввод/вывод. например, мы хотим, написать программу, которая заполняет массив циклическим 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);
    }

    на чистом асме мы бы много отвлекались на посторонние вещи. и было бы сложнее начать. а так -- у нас легкий старт
     
  14. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
  15. micro

    micro New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2010
    Сообщения:
    121
    bug1z
    асм не нужно учить по книжкам. можно, но не обязательно. как уже сказали, просто берете отладчик и отлаживаете на здоровье. но если вы ещё не знаете базовых команд, то скачайте просто справочник по командам и прерываниям.
    справочник я приложил.
    Отредактировано:не привинчивается файл. ищи в гугле. мой называется helppc.
     
  16. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Зачем усложнять? Этот код можно заменить более коротким и понятным
    mov al,'0'
    A1:
    stosb
    inc eax
    and al,37h
    loop a1
     
  17. stallker

    stallker New Member

    Публикаций:
    0
    Регистрация:
    9 май 2008
    Сообщения:
    360
    У Калашникова книга же вроде для 16 битного ассемблера, или у меня старое издание?
     
  18. bug1z

    bug1z New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2008
    Сообщения:
    228
    Да, так оно и есть. Но говорили, что лучше начать с ассемблера под DOS, а потом перейти на 32-битный под Windows.
     
  19. stallker

    stallker New Member

    Публикаций:
    0
    Регистрация:
    9 май 2008
    Сообщения:
    360
    Не майтесь дурью. У Юрова описывается IA-32 используйте.
     
  20. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    medstrax1 Вариант с LEA лучше