Thread injection - execute içinde

Başlatan power20, 01 Nisan 2020, 18:16:15

power20



ThreadTerminate fonksiyonu işe yaramadığı durumda, Çalışan ve execute esnasında kilitlenmiş bir thread, dışarıdan şu yöntemle sonlandırılabiliyor.

Thread suspend edilerek
eip register adresi dışarıdaki bir prosedür adresine veya OnTerminate adresine yönlendiriliyor. Sonra resume yapıldığında thread bitmiş oluyor.

Fakat ben threadi tamamen öldürmemek için, execute başlangıcında sorunsuz halde iken eip bilgisini aldım. Kilitlenme olduğunda bu eip noktasından başlasın sorunsuz devam etsin istiyorum. Fakat olmuyor. 

Kısaca execute olayına dışarıdan müdahale ederek yine execute içindeki başka bir noktaya gitmesini nasıl sağlarım? PIC deki watchdog benzeri düzen arayışındayım. Unutmayalım ki bu esnada execute olayı kilitlenmiş ve kendine faydası yok haldedir. If vs çalışmıyor.

tunayk

Hocam threadi başa almakla yeni thread başlatmak arasında pek bir fark yok aslında. Hani desen ki kilitlenen thread deki yapılan işler boşa gitmesin, gelinen noktayı global değişkenlerde tutarsın, yeni thredde bunları okut ve eski noktadan devam etmiş olur.

power20

#2
 Mevcut durumda kilitlenen Threadi sonlandırıp yeniden başka oluşturuyorum. fakat bunların sayısı arttıkça hafıza şişmesi oluyor. windows görev yöneticisinden görülüyor. Abartıp 1000 thread oluşturup silip tekrar oluşturuyorum. hafızada kalıntı oluyor. 

Program belki çok uzun süre açık kalacak. böyle bir hafıza sorunu olmaması gerekiyor.

brandice5

Gittiğiniz yol doğru değil gibi. Sizin probleminiz thread'den ziyade memory leak.
Ben olsam kitlenen threadi sonlandırmak yerine, neden kitlendiğini bulup kitlenmesini engellerdim.