Кто писал драйвер на смеси кода asm (64 бит) + Си используя DDK

Тема в разделе "WASM.NT.KERNEL", создана пользователем PROFi, 30 авг 2007.

  1. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    Вопрос: Имеется часть кода на Си, и часть на асме (64 бит). Необходимо слинковать все это добро в один файл используя средства DDK (т.е. используя build). Как настроить файлы sources и makefile чтобы все линковалось в один файл драйвер.
    PS: Крайне благодарен буду если ответ в виде исходников (каких не важно) главное чтобы собирались build -csZ и желательно были 64 бита.
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    makefile как обычно
    sources:
    Код (Text):
    1. TARGETNAME=<name>
    2. TARGETPATH=<path>
    3. TARGETTYPE=DRIVER
    4.  
    5.  
    6. AMD64_SOURCES=<asmx64module>.asm
    7. I386_SOURCES=<asmx86module>.asm
    8.  
    9. SOURCES=test.c
    в головной дире делем 2 поддиры AMD64 и I386 в них кладём
    к примеру modx64.asm и modx86.asm соответственно. Для примера получим кросплатформенное получение регистра cr0.
    PROFi.c:
    Код (Text):
    1. #include <ntddk.h>
    2.  
    3. extern DWORD_PTR GetCr0();
    4.  
    5. NTSTATUS
    6. DriverEntry(
    7.             IN PDRIVER_OBJECT   pDrvObj,
    8.             IN PUNICODE_STRING  pusRegPath)
    9. {
    10.  
    11.     DbgPrint("%p", (PVOID) GetCr0());
    12.     return STATUS_DEVICE_CONFIGURATION_ERROR;
    13. }
    modx64.asm:
    Код (Text):
    1. public GetCr0
    2.  
    3. .code
    4. GetCr0:
    5.     mov rax, cr0
    6.     ret
    7. end
    modx86.asm:
    Код (Text):
    1. .386
    2. .model flat
    3. public _GetCr0@0
    4. .code
    5. _GetCr0@0:
    6.     mov eax, cr0
    7.     ret
    8. end _GetCr0@0
    буду рад если съекономил время
    ЗЫ если пользуешься аськой и есть желание общаться на тему драйвер девелопмента можешь написать мне, ато спецов катастрофически не хватает
    чуть не забыл атач
     
  3. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    rain
    Спасибо, за ответ, но уже и сам разобрался. Т.е. смущало AMD64_ххх, но теперь все в порядке. А за аттач (name) отдельно спасибо :), но вот только в 64 битах
    Код (Text):
    1. .endprolog          ; пролог закончен
    В нем не хватает, чтобы использовать в полную... А так все просто, собственно, собрать отдельными коммандами получалось, а вот с build работаю недавно..


    Разработкой драйверов занимаюсь около 4-5 лет, а вот работу в привелегированном режиме процессора, и прямой работой с аппаратурой уже около 10 лет. Собственно и драйверы стал разрабатывать чтобы добраться до ring 0, потому тема написания драйверов не весьма интересна, это лишь обертка.
     
  4. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    У меня не работает. Пишет: NMAKE : fatal error U1073: don't know how to make .......objfre_win7_amd64\amd64\overflow.obj'
    Код (Text):
    1. TARGETNAME=driver
    2. TARGETPATH=obj
    3. TARGETTYPE=DRIVER
    4.  
    5. BUFFER_OVERFLOW_CHECKS=0
    6. USER_C_FLAGS=/FAs
    7. INCLUDES=..\inc
    8.  
    9. SOURCES=$(TARGETNAME).c \
    10.   $(TARGETNAME).rc
    11.  
    12. AMD64_SOURCES=OverFlow.asm
    13.  
    Подскажите, пожалуйста, что ещё нужно сюда добавить
     
  5. Llirik

    Llirik Member

    Публикаций:
    0
    Регистрация:
    18 июл 2008
    Сообщения:
    468
    Оказывается .asm файлы должны лежать в подкаталогах \i386 и \AMD64 относительно файла sources, даже если указать просто:

    AMD64_SOURCES=OverFlow.asm

    сделал подкаталог AMD и положил туда асм - все собралось.
     
  6. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Что угодно, лишь бы не писать в Visual Studio с WDK, где всё собирается и ассемблируется из коробки
     
  7. somebodynew

    somebodynew New Member

    Публикаций:
    0
    Регистрация:
    18 май 2018
    Сообщения:
    8
    HoShiMin, 17 студия не поддерживала wdk на момент релиза и после полгода как минимум :lol::lol::lol::lol:
    а потом не обновлялся и не следил, привык уже так собирать
     
  8. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Так то было два года назад, не всю же теперь жизнь собирать руками. Ставь сразу 19ю студию, WDK и собирай как белый человек)
     
  9. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    кстати, тут мне посоветовали линк на ваш проект на гите, Kernel-Bridge, а вопрос состоял в перехвате NtOpenProcess средствами визора по syscall - там у вас смотрю написано Hypervisor with VT-x/EPT support - in plan. а надо интел. стало быть не подойдёт, а вообще такое учитывается/будет? (чес говоря не ковырял сорцы кроме ридми.мд) (нашёл HyperBone для своих целей)
     
  10. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Да, у меня пока сделан гипервизор только для AMD-V. Для интелов очень советую HyperPlatform.
     
  11. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    да, это тоже отыскал - впечатлило.
     
  12. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    А не подойдёт ли тебе ObRegisterCallbacks вместо перехвата NtOpenProcess? Зачем извращаться, если фильтровать открытие процессов можно легальным способом?
     
  13. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    это да, но хочется вкурить тематику виртуализации и на основе гипервизора это запилить
     
  14. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.422
    Адрес:
    Россия, Нижний Новгород
    Тогда, если хочешь разобраться именно в устройстве гипервизоров, советую начинать с SimpleVisor от Ионеску для VT-x и с SimpleSvm от Satoshi Tanda для AMD-V.
    HyperPlatform - слишком сложный фреймворк, чтобы изучать по нему устройство гипервизоров. Сделан на основе SimpleVisor'a, но с кучей наворотов, которые на начальном этапе сильно усложнят понимание.