Challenge 8

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Challenge 8

Mesaj gönderen G.Arkas »

Hmm yeniden basladigini anlamak. Simdi oldu iste ;)
Resim
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Challenge 8

Mesaj gönderen mkysoft »

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.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Challenge 8

Mesaj gönderen Kuri_YJ »

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 ;)
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 8

Mesaj gönderen thelvaci »

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 ;)
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ü.

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.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Challenge 8

Mesaj gönderen Kuri_YJ »

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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Challenge 8

Mesaj gönderen thelvaci »

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
Teşekkürler, gerçekten ilgili insanlar olduktan sonra konular neden devam etmesin ki. Ama durum pek de bu şekilde değil maalesef.
Cevapla