
Challenge 8
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Challenge 8
Uygulamayı güncellemek için kendimce bir algoritma oluşturmuştum. Çalışacak olan aynı uygulama olmadığı için;
Mevcudun adına _old ekleyip, yenisini orjinal isimle kaydediyordum.
Shellexcute ile yenisini açarken kendisini (eski) kapatıyordu. Yeni açılan _old olan dosyanın fileinuse modundan çıkana kadar bekliyip sildikten sonra kendini açıyordu. Tabi o zamanlar UAC yoktu.
Mevcudun adına _old ekleyip, yenisini orjinal isimle kaydediyordum.
Shellexcute ile yenisini açarken kendisini (eski) kapatıyordu. Yeni açılan _old olan dosyanın fileinuse modundan çıkana kadar bekliyip sildikten sonra kendini açıyordu. Tabi o zamanlar UAC yoktu.
Re: Challenge 8
Selamlar,
Disk'e, Memory'ye veya Registry'ye yazmak yok dediğinizde siz O bilgisayara herhangi bir yerine bir şey koyamazsınız demiş oluyorsunuz. Yani çözümü bu bilgisayarda aramamak gerekiyor. İster Kernel, ister işletim sistemine, isterseniz CPU Registerylerine kadar inin, yazacağınız her şey illa ki ya diske ya da memorye gidecektir.
Bu durumda, ben alternatif üretiyorum. Program başladığında bir server'a bağlanıp daha önceden çalışıp çalışmadığını sorar (witness server) eğer çalışmıyor ve ilk defa çalışıyor ise Witness serverdan ilk defa çalıştırıldığına dair bir sayı döner. Buna bakarak programım kaçıncı kez çalıştırıldığını anlar. Tabi Server ile programım arasında her çalıştığında değer arttır, şimdi sıfırla gibi iletişimden bahsetmiyorum. Bu kurgunun olduğunu varsayıyorum.
Ama dediğim gibi siz memory'ye yazamazsın, diske yazamazsın gibi kısıt getirdiğiniz için bu durumda 2. bir makineye ihtiyaç doğmuş olur
Disk'e, Memory'ye veya Registry'ye yazmak yok dediğinizde siz O bilgisayara herhangi bir yerine bir şey koyamazsınız demiş oluyorsunuz. Yani çözümü bu bilgisayarda aramamak gerekiyor. İster Kernel, ister işletim sistemine, isterseniz CPU Registerylerine kadar inin, yazacağınız her şey illa ki ya diske ya da memorye gidecektir.
Bu durumda, ben alternatif üretiyorum. Program başladığında bir server'a bağlanıp daha önceden çalışıp çalışmadığını sorar (witness server) eğer çalışmıyor ve ilk defa çalışıyor ise Witness serverdan ilk defa çalıştırıldığına dair bir sayı döner. Buna bakarak programım kaçıncı kez çalıştırıldığını anlar. Tabi Server ile programım arasında her çalıştığında değer arttır, şimdi sıfırla gibi iletişimden bahsetmiyorum. Bu kurgunun olduğunu varsayıyorum.
Ama dediğim gibi siz memory'ye yazamazsın, diske yazamazsın gibi kısıt getirdiğiniz için bu durumda 2. bir makineye ihtiyaç doğmuş olur

Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Challenge 8
Userland'da çalışan bir uygulama olduğu ve kolay çözümlerle gelinmesin, sorun hakkında düşünülsün diye koymuştum o kısıtları. Ayrıca; senkronizasyon nesnesini oluşturma emrini biz veriyoruz ve evet bu kernel tarafında virtual memory'de handle table da tutuluyor elbette; ama memory allocation'ı yada management'ını biz yapmıyoruz. Yani bu iş için bir Getmem, VirtualAlloc, HeapCreate, HeapAlloc, GlobalAlloc, LocalAlloc vs. aklınıza ne kadar hafıza tahsisat API'si geliyor ise onları kullanmıyoruz. Benim bahsetmek istediğim kısıt bu ve buna benzer kısıtlardı. Ayrıca belirtmek isterim ki; handle tablosunun managament'ı sırasında açılan geçici hafıza blokları swap'lanmıyor kernel tarafında; kernel'a tahsis edilmiş yeterince memory bloğu var ve userland'den o bloklara normal yollarla erişim imkanımız yok protected mode olayından ötürü.Kuri_YJ yazdı:Selamlar,
Disk'e, Memory'ye veya Registry'ye yazmak yok dediğinizde siz O bilgisayara herhangi bir yerine bir şey koyamazsınız demiş oluyorsunuz. Yani çözümü bu bilgisayarda aramamak gerekiyor. İster Kernel, ister işletim sistemine, isterseniz CPU Registerylerine kadar inin, yazacağınız her şey illa ki ya diske ya da memorye gidecektir.
Bu durumda, ben alternatif üretiyorum. Program başladığında bir server'a bağlanıp daha önceden çalışıp çalışmadığını sorar (witness server) eğer çalışmıyor ve ilk defa çalışıyor ise Witness serverdan ilk defa çalıştırıldığına dair bir sayı döner. Buna bakarak programım kaçıncı kez çalıştırıldığını anlar. Tabi Server ile programım arasında her çalıştığında değer arttır, şimdi sıfırla gibi iletişimden bahsetmiyorum. Bu kurgunun olduğunu varsayıyorum.
Ama dediğim gibi siz memory'ye yazamazsın, diske yazamazsın gibi kısıt getirdiğiniz için bu durumda 2. bir makineye ihtiyaç doğmuş olur
Velhasıl, programı çözecek olan kişi aslında bir memory ayrımı yapmamış oluyor, tabii ki registry ve disk de kullanılmıyor bu örnekte. Sadece mutex kullanılıyor ve bu da kernel tarafında process'in handle tablosunda bir pointer girdiye neden oluyor. Konu hakkında detaylı bilgi için, PEB, EPROCESS ve KPROCESS yapılarını inceleyebilirsiniz.
Ama konu ile ilgilendiğiniz ve bir öneri getirdiğiniz için teşekkür ederim.
Re: Challenge 8
Selamlar,
Memory dediğinizde benim aklıma Hardware Memory geldi (doğal olarak da o makinede yapacağınız her şey, ister traditional ister protected olsun her şey memorye gidecek) ve yine geniş açılı bakıp çözümü sadece Windows olarak da düşünmedim. Yani kullandığınız işlemler ve Kernel, PEB, EPROCESS KPROCESS vs. bu gibi şeyler windows NT'ye ait olan yapılar/şeyler. Diğer işletim sistemlerinde doğrudan bunlar yok, benzerleri var veya daha farklı olan metodları kullanıyorlar.
Konuya dönecek olursak, soruyu en basit şekilde yazıldığı gibi okuyup yanıtlamaya kalktığımda otomatik olarak işletim sistemi, dil ve makine bağımsız olarak düşünüp öyle yanıt verdim
Sonuç olarak konu, bu işlerdeki yeni ve tecrübesi az olan arkadaşların öğrenmesini teşvik edici ve bizim gibi artık emekliliğine az kalmış dinozorların tecrübelerini kullanmaları açısından güzel olmuş. Soruların devamını bekliyoruz. Bilgi ve sevgi paylaşıldıkça büyür
Kolay Gelsin
Memory dediğinizde benim aklıma Hardware Memory geldi (doğal olarak da o makinede yapacağınız her şey, ister traditional ister protected olsun her şey memorye gidecek) ve yine geniş açılı bakıp çözümü sadece Windows olarak da düşünmedim. Yani kullandığınız işlemler ve Kernel, PEB, EPROCESS KPROCESS vs. bu gibi şeyler windows NT'ye ait olan yapılar/şeyler. Diğer işletim sistemlerinde doğrudan bunlar yok, benzerleri var veya daha farklı olan metodları kullanıyorlar.
Konuya dönecek olursak, soruyu en basit şekilde yazıldığı gibi okuyup yanıtlamaya kalktığımda otomatik olarak işletim sistemi, dil ve makine bağımsız olarak düşünüp öyle yanıt verdim

Sonuç olarak konu, bu işlerdeki yeni ve tecrübesi az olan arkadaşların öğrenmesini teşvik edici ve bizim gibi artık emekliliğine az kalmış dinozorların tecrübelerini kullanmaları açısından güzel olmuş. Soruların devamını bekliyoruz. Bilgi ve sevgi paylaşıldıkça büyür

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Re: Challenge 8
Teşekkürler, gerçekten ilgili insanlar olduktan sonra konular neden devam etmesin ki. Ama durum pek de bu şekilde değil maalesef.Kuri_YJ yazdı:Selamlar,
Memory dediğinizde benim aklıma Hardware Memory geldi (doğal olarak da o makinede yapacağınız her şey, ister traditional ister protected olsun her şey memorye gidecek) ve yine geniş açılı bakıp çözümü sadece Windows olarak da düşünmedim. Yani kullandığınız işlemler ve Kernel, PEB, EPROCESS KPROCESS vs. bu gibi şeyler windows NT'ye ait olan yapılar/şeyler. Diğer işletim sistemlerinde doğrudan bunlar yok, benzerleri var veya daha farklı olan metodları kullanıyorlar.
Konuya dönecek olursak, soruyu en basit şekilde yazıldığı gibi okuyup yanıtlamaya kalktığımda otomatik olarak işletim sistemi, dil ve makine bağımsız olarak düşünüp öyle yanıt verdim![]()
Sonuç olarak konu, bu işlerdeki yeni ve tecrübesi az olan arkadaşların öğrenmesini teşvik edici ve bizim gibi artık emekliliğine az kalmış dinozorların tecrübelerini kullanmaları açısından güzel olmuş. Soruların devamını bekliyoruz. Bilgi ve sevgi paylaşıldıkça büyür![]()
Kolay Gelsin