2012-09-25 18 views
5

altında dinamik olarak yüklenmiş bir kütüphanenin adres aralığı LoadLibrary ile eklentileri yükleyen bir çalışma programım var.Windows

Yeni gereksinimi: kodunda bir noktada, ben bir işaretçi verilen ediyorum ve test etmek gerekir kod veya bir eklenti statik veriler içine bu işaretçi noktaları olsun.

bool is_pointer_into_plugin(void *p, HMODULE h); 

Eşdeğerde, varsa işaretçinin işaret ettiği eklentiyi almam gerekir. Ayrıca, işaretçinin ana programın koduna veya statik verilerine (ve sadece salt okunur ve okuma-yazma alanları arasında ayrım yapmasını) gösterip göstermediğini bilmem gerekiyor.

HMODULE plugin_containing_pointer(void *p); 

Aynı şekilde, bir eklenti eşleştirilir kapsamını (adres ve boyut) almak için mümkün olması gerekmektedir. Ayrıca ana program için bu bilgiye ihtiyacım var.

nasıl is_pointer_into_plugin veya plugin_containing_pointer, veya eşdeğer uygulayabilir? Gerekirse

Ben LoadLibrary çağrısını değiştirebilir. Arama mümkün olduğunca hızlı olmalı, yükleme zamanı kodunun hızlı olması gerekmiyor. Eklentileri ayrı işlemlerde çalıştırmak ve paylaşılan bellekle iletişim kurmak bir seçenek değildir. Program Windows XP ve üstü (ve Linux, ancak bu another question) çalışması gerekir.

ihtiyacım bilgidir az ya da çok ANNELER yarar listdlls raporlar, bu yüzden nasıl uygulandığı öğrenmek etmeye çalıştığı. LDR_DATA_TABLE_ENTRY'a bağlanan PEB yapısını almak için NtQueryInformationProcess'u kullanarak suggestion gördüm. umut verici görünüyor ama: her DLL (? öyle) başlangıç ​​adresi, ancak hiçbir boyutu olabilir gibi

  • Ben görünen bir DllBase görebilirsiniz.
  • NtQueryInformationProcess dokümantasyonu o unportable olarak işaretler, ancak benim yapmaya çalıştığım şey için bir alternatif önermez.
  • Sistemimde, PEB alanındaki tek alanlar BeingDebugged ve SessionId, artı bazı ReservedN bayt dizileridir - iyi bir işaret değil.

Eklentilerin adres aralığını nasıl numaralandırabilirim veya işaretçinin eklenti içinde olup olmadığını veya işaretçinin hangi eklentinin gösterildiğini nasıl belirleyebilirim? GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS bayrağıyla

cevap

4

GetModuleHandleEx içine işaretçi noktaları modülü hangi söyleyecektir. Buradan hangi bölümün olduğunu anlamak için modül başlıklarını inceleyebilirsiniz. Ama tüm egzersiz eğlenceli kokuyor. Bir işaretçinin hangi eklentiye işaret ettiğini önemsiyorsunuz?