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 alanlarBeingDebugged
veSessionId
, 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