2 puan yazan GN⁺ 2025-02-10 | Henüz yorum yok. | WhatsApp'ta paylaş

Rust ile Basit Bir Sürücü Yazmak

  • Rust dil ekosistemi her gün büyüyor ve bellek ile eşzamanlılık güvenliğini derleme zamanında sunan tek ana akım dil. Güçlü ve zengin bir derleme sistemi (cargo) ile artan paket sayısı (crates) da avantajları arasında.
  • Rust, bir sistem programlama dili olarak C/C++ ile aynı alanlarda kullanılabilir. C türlerini Rust'a dönüştürürken ortaya çıkan ayrıntılı yapı, uygun sarmalayıcılar ve makrolarla hafifletilebilir.
  • Bu yazı, Windows Kernel Programming kitabında tanıtılan "Booster" sürücüsünün Rust sürümünü yazarak iş parçacığı önceliğinin nasıl değiştirileceğini açıklıyor.

Başlarken

  • Sürücü derlemeye hazırlanmak için Windows Drivers-rs'e bakılmalı; ayrıca WDK ve LLVM kurulumu gerekli.
  • Yeni bir Rust kütüphane projesi oluşturarak sürücü yazılabilir: cargo new --lib booster
  • CRT'yi statik olarak bağlayacak şekilde build.rs dosyası eklenmeli.

Kod Yazımı

  • Çekirdekte standart kütüphane olmadığından başlangıçta #![no_std] kullanılır.
  • wdk_sys crate'i düşük seviyeli çekirdek işlevleriyle birlikte çalışabilirlik sağlar, wdk crate'i ise daha yüksek seviyeli sarmalayıcılar sunar.
  • Vec ve String, alloc modülünde tanımlıdır ve global ayırıcı sağlanarak kullanılabilir.
  • DriverEntry, tüm Windows çekirdek sürücülerinin giriş noktasıdır ve Rust'ın println! makrosu kullanılarak hata ayıklama çıktısı verilebilir.

İstek İşleme

  • IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_WRITE istekleri işlenmeli.
  • boost_write işlevi, iş parçacığı önceliğini gerçekten değiştiren kısımdır.
  • ThreadData yapısı kullanılarak sürücüye istek iletilir.

Sürücüyü Kurma ve Test Etme

  • Sürücü dosyası sc.exe aracıyla kurulabilir ve sc start ile sisteme yüklenebilir.
  • C++ uygulaması kullanılarak sürücüyle iletişim kurulabilir ve doğru yapı iletilerek test edilebilir.

Sonuç

  • Rust ile çekirdek sürücüsü yazmak mümkündür ve desteğin hızla iyileşmesi bekleniyor.
  • Rust'ın avantajlarından en iyi şekilde yararlanmak için güvenli sarmalayıcılar oluşturup kodun ayrıntılı yapısını azaltmak ve unsafe bloklardan kaçınmak önemli.
  • Bu yazının kodları GitHub'da görülebilir: https://github.com/zodiacon/Booster

Henüz yorum yok.

Henüz yorum yok.