Създаване на водача на ядрото режим в среда Borland Delphi на

въведение
Код: от стартиране на двигателя
Конфликт обект файлови формати
пиши шофьор
Компилация, монтаж и проверка на водача
резюме

Създаване на водача на ядрото режим в среда Borland Delphi на

Програмиране на линия системи Windows NT може да бъде разделена на две коренно различни части - създаването на код на потребителя режим и ядрото режим код.

Архитектурата на Windows използва само две халки: 0 ри и 3-ти. В код пръстен нулевия работи на хардуера слой (HAL), ядрото на системата и различни драйвери, включително и драйвери на устройства. циклични услугите на 3-ти се изпълняват, програмите, които взаимодействат с потребителя, както и помощен код, за да се обадя на функциите на ядрото на потребителски режим.

развитие на драйвери, Microsoft предлага комплект за развитие на драйвер (DDK), който е набор от заглавни файлове, комуналните услуги, както и документация. От цялата документация на вътрешни причини корпоративните стандарти за съответствие, примерен код и изграждане на инструменти в DDK фокусирани върху езика C / C ++. Естествено, за развитието на водачите повечето програмисти се радва на лесно интегрируеми с DDK инструменти освободен, разбира се, същото от Microsoft - като Visual C. В интернет се предлагат и материали, свързани с развитие на водача на Асемблер език, но такива, събрани инструменти, използвани отново Microsoft Macro Assembler и асемблер включена DDK.

Говорейки за "боклука, който идва с DDK", "колектор на Microsoft" или просто "колекционер", имаме предвид link.exe. идва с няколко продукта на Microsoft, включително действителното DDK, Macro Assembler, Visual C, и др. Разлики между версиите на програмата за тази статия не е от основно значение.

Код: от стартиране на двигателя

Стана така, че операционните системи на Windows са написани на C / C ++. Не е изненадващо, че DDK е насочена към C / C ++ - компилатори. За тези езици, в процес на преобразуване на изходния код в машинен код, традиционно се провежда в два етапа - съставяне и монтаж. В процеса на съставянето на програмата източник се превръща в така наречените обекти, модули, които обикновено съдържат родния код, както и информация за износа на променливи и функции. Думата "обикновено" се използва тук за причината, поради която някои компилатори предоставят възможност да се сложи в модулите на обекта не са родния код, както и така наречените междинни код (смътно напомня на MSIL и Java байткод), която дава възможност след това да се оптимизира кода на нивото на цялото приложение, няма отделни обекти модули. Втората стъпка е сглобяването. Сглобяване след компилация генерира един или повече обекти, модули и статично свързани библиотеки, наречени изпълнимо изображение (изпълнимо изображение). Изпълним образ е изграден в съответствие с изискванията на операционната система мишена и съдържа процесора директно изпълним код машина, както и различни спомагателни информация.

Създаване на NT ядрото режим шофьор-файл също е предмет на тази схема. Сглобяване генерира изпълним изображение, което показва в заглавната, че това е водачът на NT-ядрото режим, в съответствие с възможностите, при сглобяване.

Конфликт обект файлови формати

На "kompilyatorostroeniya" зората на Windows компилатори всички разработчици да се придържат към една обща цел файлов формат - Object Module File (лицево-челюстната), предложен от Intel Corporation. Въпреки, че е възможно, например, за да се създаде обект файл в околната среда на Borland Turbo Assembler и е свързан с проекта, създаден в Microsoft C, без особено затруднение.

Ярък пример за влиянието на корпоративната политика по технически въпроси е в преход, съставителите на Microsoft Corporation в стандартния формат на обектните файлове COFF (Постигането на общата цел формат на файла). От гледна точка на потребителите на компилатори и лицево-челюстната формати COFF практически неразличими, но с перспектива на Microsoft е обосновано от факта, че също е стандартна COFF обект файлов формат в среда UNIX. По този начин, на прехода трябва да се разглежда като един далечен поглед върху софтуера на различни платформи създаден.

Borland Corporation, един от най-големите производители на компилатори за Windows, заяви, че Microsoft «отново е изобретил колелото", както и че в Borland продукти ще продължи да използва Intel лицево-челюстната формат, но в същото време подозрително синхронно направи някои промени в съставителите. За съжаление, Delphi версия над 3 създава несъвместим с Intel лицево-челюстната формат, въпреки че подобно на външен вид.

В момента, в резултат на "борбата" компилатор гиганти губят в обикновено се случва, са програмисти. Заслужава да се отбележи, че сегашната колектор от Microsoft има способността да конвертирате формат Intel лицево-челюстната да COFF. Модерен подразбиране Borland компилатори (без допълнителни опции), издадени директно изпълнимо изображение, заобикаляйки етапът на генериране на обект файл. Възможност за генериране на обект файл в съставителите са, но заради промените, направени от Borland формат обектните файлове Borland се разбират само от повечето компилатори Borland и Microsoft асемблер не разпознава ги като валиден.

Въпреки това, има голям брой програмисти, които използват в своята професионална работа, общо взето, Borland Delphi. Някои от тях в своите задачи по-рано или по-късно да премине от интерфейс технология визуален дизайн и работа с база данни, технология за изпълнение на задачи от ниско ниво с операционната система, работи в непреодолима на пръв поглед, на бариерата, която разделя потребителски режим и режим на ядрото. В съзнанието на по-голямата част от програмисти в момента доста твърдо установено мнение, това означава, Borland Delphi, за да създадете шофьор на NT-ядрото режим не могат. Вярно ли е това?

пиши шофьор

Изпълнимото картинката за родния подсистема на Windows, за да го кажем по-просто - NT-ядрото режим шофьор, изходния код е написан на Object Pascal (Delphi, сега се нарича себе си език), можете да създадете. Но преди да направите това, е необходимо да се изяснят някои важни въпроси.

На първо място, на колектора от Microsoft към днешна дата единственият, който е в състояние да генерира такъв изпълнимо изображение, така че не го правете в никакъв случай без него.

Второ, вградени Delphi колектор подразбиране инжектира всеки изпълним код на вашия Run-Time Библиотека (RTL), а след това компилаторът изисква някои функции на този RTL да изпълни някои от езиковите особености. От RTL Делфи е проектирана да изпълнява в режим на потребител, а след това, разбира се, и езикови особености на Delphi, които са фокусирани върху функционалността на RTL, ще трябва да жертват. Тези функции включват, например, подкрепа за динамични масиви, включително видове низове и операции низови, класове подкрепа, по време на изпълнение тип информация (RTTI) и др

На трето място, само Win32-версии на Delphi, които са създали обектни файлове, които са в пълно съответствие стандарт лицево-челюстната са Delphi 2 и Delphi 3. Така че тези, които са свикнали да използват езиковите характеристики на по-нови версии, като претоварване на функции и процедури директива претоварване, трябва да се даде от тях.

Четвърто, изходния текст водач в Делфи също ще има своите особености. Така например, на колектора ще трябва да посочите т.нар входната точка - функция в тялото на водача, причинени от системата, когато водачът се инициализира. Файлът с обект, който се генерира за програмата на библиотеката Delphi или тип проект. не съдържа герой входни точки, така че трябва да използвате този вид единица проект.

Кодът, който реализира минимална функционалност на водача, а именно възможността за пускане и спиране, се хвърли върху.

Бъдете внимателни с така наречената "призова конвенция" (призоваващи конвенции)! И двете вътрешни функции на водача, както и внесените функции Native API предполагат съгласие stdcall. Въпреки това, той трябва да следи отблизо подписа на всяка внесена функция в ntoskrnl.lib. защото, ако след името на функцията не е необходимо да се регистрирате "@" и броя на битовете в стека, притежаван от параметрите на функция, тази функция трябва да бъде внесена до cdecl на споразумение. както по-горе с DbgPrint функция. Call функция е посочен правилно обажда конвенция почти винаги води до срив на системата или BSOD.

Компилация, монтаж и проверка на водача

По-долу е даден списък с файлове, които трябва да се създаде шофьор.

Borland Delphi 3 доставка:

  • dcc32.exe - съставител, ползвана от командния ред;
  • rlink32.dll - библиотека, която изпълнява монтаж изпълним образа (въпреки че ние просто не е необходим този монтаж, без такова съставител библиотека не може да започне);
  • sysinit.dcu и system.dcu - съставен Delphi RTL модули.

Доставка на Microsoft NT DDK:

  • link.exe - колектор;
  • mspdb50.dll - подкрепа библиотека колектор;
  • ntoskrnl.lib - библиотека, която описва функциите, внесени от ntoskrnl.exe - модул, съдържащ по-голямата част от режима на ядрото API.

Съставянето на код се изпълнява, както следва: