Neden NThread?
NThread, yeni bir uzak thread oluşturmak yerine hedef process'te zaten yaşayan **tek** bir OS thread'ini geçici olarak yönlendirir. Bu,...
NThread, yeni bir uzak thread oluşturmak yerine hedef process'te zaten yaşayan tek bir OS thread'ini geçici olarak yönlendirir. Bu, CreateRemoteThread kullanmayan bir çağrı yürütme modelidir; hedefe hiç bellek tahsisi yapılmadığı anlamına gelmez. Accessor zinciri ve dörtten fazla parametreli çağrılar hedefte çalışma belleği veya küçük stub'lar kullanabilir.
Varsayılan kullanım modeli
Uygulama tarafında doğrudan NThread kurmak çoğu zaman gerekmez. createAccessor(pid) varsayılan olarak process'teki aday thread'leri yarışa sokar, ilk başarılı yönlendirmeyi seçer ve NThread üzerinde kurulu tam accessor zincirini döndürür. Bu accessor ile alloc, read, write ve call aynı yürütme mekanizmasını kullanır.
Belirli bir thread seçmek, özel bir root accessor kurmak veya düşük seviye context işlemlerine erişmek ileri seviye kullanım alanıdır. Bu durumda thread ve accessor yaşam döngüsünün sorumluluğu çağırandadır.
Ne sağlar?
- Hedefte yaşayan bir thread üzerinde uzaktaki çağrı çalıştırır.
- Çağrı bitince thread'i spin park noktasına döndürür; dönüş değeri context'ten okunur.
- Deinit sırasında başlangıçta kaydedilen genel amaçlı, control ve XMM context'ini geri uygular.
- İlk dört parametre, stack parametreleri ve dönüş değerleri için NThread'in desteklediği Windows x64 ABI düzenini kurar.
Ne garanti etmez?
NThread, seçilen thread'in o anda güvenle durdurulup tekrar yürütülebileceğini garanti edemez. Thread bir lock, loader lock veya uygulamaya özgü kritik kaynak tutuyor olabilir; fonksiyon thread-local bağlam bekliyor ya da hiç dönmüyor olabilir. Yarışın bir thread seçmesi de bu semantik riskleri ortadan kaldırmaz.
NThread görünmez veya risksiz değildir. Yeni thread oluşturmamak, mimari bir tercihtir; hedefin davranışını doğru seçme yükünü kullanıcıdan kaldırmaz. Devam etmeden önce thread seçimi, çağrı yaşam döngüsü ve hata sınırlarını okuyun.