Вопрос: Имеется часть кода на Си, и часть на асме (64 бит). Необходимо слинковать все это добро в один файл используя средства DDK (т.е. используя build). Как настроить файлы sources и makefile чтобы все линковалось в один файл драйвер. PS: Крайне благодарен буду если ответ в виде исходников (каких не важно) главное чтобы собирались build -csZ и желательно были 64 бита.
makefile как обычно sources: Код (Text): TARGETNAME=<name> TARGETPATH=<path> TARGETTYPE=DRIVER AMD64_SOURCES=<asmx64module>.asm I386_SOURCES=<asmx86module>.asm SOURCES=test.c в головной дире делем 2 поддиры AMD64 и I386 в них кладём к примеру modx64.asm и modx86.asm соответственно. Для примера получим кросплатформенное получение регистра cr0. PROFi.c: Код (Text): #include <ntddk.h> extern DWORD_PTR GetCr0(); NTSTATUS DriverEntry( IN PDRIVER_OBJECT pDrvObj, IN PUNICODE_STRING pusRegPath) { DbgPrint("%p", (PVOID) GetCr0()); return STATUS_DEVICE_CONFIGURATION_ERROR; } modx64.asm: Код (Text): public GetCr0 .code GetCr0: mov rax, cr0 ret end modx86.asm: Код (Text): .386 .model flat public _GetCr0@0 .code _GetCr0@0: mov eax, cr0 ret end _GetCr0@0 буду рад если съекономил время ЗЫ если пользуешься аськой и есть желание общаться на тему драйвер девелопмента можешь написать мне, ато спецов катастрофически не хватает чуть не забыл атач
rain Спасибо, за ответ, но уже и сам разобрался. Т.е. смущало AMD64_ххх, но теперь все в порядке. А за аттач (name) отдельно спасибо , но вот только в 64 битах Код (Text): .endprolog ; пролог закончен В нем не хватает, чтобы использовать в полную... А так все просто, собственно, собрать отдельными коммандами получалось, а вот с build работаю недавно.. Разработкой драйверов занимаюсь около 4-5 лет, а вот работу в привелегированном режиме процессора, и прямой работой с аппаратурой уже около 10 лет. Собственно и драйверы стал разрабатывать чтобы добраться до ring 0, потому тема написания драйверов не весьма интересна, это лишь обертка.
У меня не работает. Пишет: NMAKE : fatal error U1073: don't know how to make .......objfre_win7_amd64\amd64\overflow.obj' Код (Text): TARGETNAME=driver TARGETPATH=obj TARGETTYPE=DRIVER BUFFER_OVERFLOW_CHECKS=0 USER_C_FLAGS=/FAs INCLUDES=..\inc SOURCES=$(TARGETNAME).c \ $(TARGETNAME).rc AMD64_SOURCES=OverFlow.asm Подскажите, пожалуйста, что ещё нужно сюда добавить
Оказывается .asm файлы должны лежать в подкаталогах \i386 и \AMD64 относительно файла sources, даже если указать просто: AMD64_SOURCES=OverFlow.asm сделал подкаталог AMD и положил туда асм - все собралось.
HoShiMin, 17 студия не поддерживала wdk на момент релиза и после полгода как минимум :lol::lol::lol::lol: а потом не обновлялся и не следил, привык уже так собирать
Так то было два года назад, не всю же теперь жизнь собирать руками. Ставь сразу 19ю студию, WDK и собирай как белый человек)
кстати, тут мне посоветовали линк на ваш проект на гите, Kernel-Bridge, а вопрос состоял в перехвате NtOpenProcess средствами визора по syscall - там у вас смотрю написано Hypervisor with VT-x/EPT support - in plan. а надо интел. стало быть не подойдёт, а вообще такое учитывается/будет? (чес говоря не ковырял сорцы кроме ридми.мд) (нашёл HyperBone для своих целей)
А не подойдёт ли тебе ObRegisterCallbacks вместо перехвата NtOpenProcess? Зачем извращаться, если фильтровать открытие процессов можно легальным способом?
Тогда, если хочешь разобраться именно в устройстве гипервизоров, советую начинать с SimpleVisor от Ионеску для VT-x и с SimpleSvm от Satoshi Tanda для AMD-V. HyperPlatform - слишком сложный фреймворк, чтобы изучать по нему устройство гипервизоров. Сделан на основе SimpleVisor'a, но с кучей наворотов, которые на начальном этапе сильно усложнят понимание.