- Katılım
- 18 Kas 2013
- Konular
- 26
- Mesajlar
- 471
- Online süresi
- 29d 10h
- Reaksiyon Skoru
- 413
- Altın Konu
- 1
- TM Yaşı
- 12 Yıl 6 Ay 22 Gün
- Başarım Puanı
- 139
- MmoLira
- 1,329
- DevLira
- 9
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Merhabalar,
Bugün birkaç serverde ve bende yapılmaya başlayınca çözmek zorunda kaldım, lamerlerin kendini bir halt sanmaya başladığı bir açığa dönüşmeden önleminizi alın.
Güvenlik sebebi ile nasıl yapıldığını anlatmayacağım ama açığı basitçe açıklamak gerekirse içerik şu şekilde;
Hata tamamiyle game dosyasının m_stCurQuest erişememesinden kaynaklı. Erişememe sebebi ise hafızadan silinmiş olması. (Diğer adıyla programcıların bildiği gibi "dangling") bu duruma sebeb olabilecek birkaç şeyler var örneğin quest'i anlık durdurabilecek fonksiyonlar. (örneğin: select) ben bunu sadece select için yaptım çünkü çökmelerin hepsi bununla alakalıydı. Yaptığım çözüm ise QuestState içerisine quest_name eklemek böylelikle quest durmadan önce quest name QuestState içerisinde muhafaza edicem böylelikle quest devam etmeye başladığı zaman sistem benim belirttiğim quest_name baz alıcak eğer ki boş değilse. Eğer boş ise mevcut olan quest ismini alıcak böylelikle "dangling" sorunu ortadan kalkmış olucak.
Güvenlik sebebi ile nasıl yapıldığını anlatmayacağım ama açığı basitçe açıklamak gerekirse içerik şu şekilde; Hata tamamiyle game dosyasının m_stCurQuest erişememesinden kaynaklı. Erişememe sebebi ise hafızadan silinmiş olması. (Diğer adıyla programcıların bildiği gibi "dangling") bu duruma sebeb olabilecek birkaç şeyler var örneğin quest'i anlık durdurabilecek fonksiyonlar. (örneğin: select) ben bunu sadece select için yaptım çünkü çökmelerin hepsi bununla alakalıydı. Yaptığım çözüm ise QuestState içerisine quest_name eklemek böylelikle quest durmadan önce quest name QuestState içerisinde muhafaza edicem böylelikle quest devam etmeye başladığı zaman sistem benim belirttiğim quest_name baz alıcak eğer ki boş değilse. Eğer boş ise mevcut olan quest ismini alıcak böylelikle "dangling" sorunu ortadan kalkmış olucak.
Kod:
quest.h aç ve "int st;" ara, altına aşağıdaki kodu ekle
Kod:
std::string quest_name;
Kod:
questlua.cpp aç ve "qs.suspend_state = SUSPEND_STATE_SELECT;" ara, altına aşağıdaki kodu ekle
Kod:
qs.quest_name = GetCurrentPC() ? GetCurrentPC()->GetCurrentQuestName() : "no_quest";
Kod:
questlua_quest.cpp aç ve "QuestState* pQS = pPC->GetRunningQuestState();" ara, altına aşağıdaki kodu ekle
Kod:
std::string stQuestName = pPC->GetCurrentQuestName();
if (pQS->quest_name.length() != 0)
stQuestName = pQS->quest_name;
Yukarıdaki çözümü uyguladığınızda herhangi bir sorun kalmayacaktır, herşeye kulp bulan arkadaşlar yorum atma zahmetinde bulunmasınlar, bir zahmet daha iyisini yazıp paylaşsınlar, herkes faydalansın. Keyifli geceler.
En Çok Reaksiyon Alan Mesajlar
Konuda anlatılan işlemin yapıldığı yerde, çağıran yerde ya da işlem tarafından çağırılan yerlerin hiç birinde eksik kontrol yok, kendinizde bakabilirsiniz ve quest adının boş olma ihtimali yok olsa bile herhangi bir crash vermesi pek mümkün değil.
Ama konuda eklenen;
questlua_quest.cpp aç ve "QuestState* pQS = pPC->GetRunningQuestState();" ara, altına aşağıdaki kodu ekle
Kod:
std::string stQuestName = pPC->GetCurrentQuestName();
if (pQS->quest_name.length() != 0)
stQuestName = pQS->quest_name;
Bu kodu eklerseniz, olmayan sorunu çözüp üstüne "pQS" pointeri boş olup olmadığı kontrol edilmediğinden direk "pQS->quest_name" ile kullanıldığından oyun bum bum olur.
Ve süper fix de tanımlanan "stQuestName" değişkeni hiç bir yerde kullanılmadığından herhangi bir şey de fixlemiş olmayacaksınız, direk kendi elinizle açık ekleyeceksiniz.
Herhangi bir crash ya da log vermediğinden hatta direk böyle bir açık olmadığından konuda herhangi bir kanıt yok.
Konuda anlatılan işlemin yapıldığı yerde, çağıran yerde ya da işlem tarafından çağırılan yerlerin hiç birinde eksik kontrol yok, kendinizde bakabilirsiniz ve quest adının boş olma ihtimali yok olsa bile herhangi bir crash vermesi pek mümkün değil.
Ama konuda eklenen;
Bu kodu eklerseniz, olmayan sorunu çözüp üstüne "pQS" pointeri boş olup olmadığı kontrol edilmediğinden direk "pQS->quest_name" ile kullanıldığından oyun bum bum olur.
Ve süper fix de tanımlanan "stQuestName" değişkeni hiç bir yerde kullanılmadığından herhangi bir şey de fixlemiş olmayacaksınız, direk kendi elinizle açık ekleyeceksiniz.
Herhangi bir crash ya da log vermediğinden hatta direk böyle bir açık olmadığından konuda herhangi bir kanıt yok.
Azıcık epvp okuyam orda yazanı türkçeleştirip burda laf sokam kendimi birşey zannedem
- Katılım
- 17 Haz 2010
- Konular
- 3,640
- Mesajlar
- 19,614
- Çözüm
- 54
- Online süresi
- 17d 14h
- Reaksiyon Skoru
- 4,815
- Altın Konu
- 163
- TM Yaşı
- 15 Yıl 11 Ay 27 Gün
- Başarım Puanı
- 474
- Yaş
- 31
- MmoLira
- -933
- DevLira
- 0
Paylaşım için teşekkürler, eline sağlık 

- Katılım
- 4 May 2018
- Konular
- 229
- Mesajlar
- 3,331
- Online süresi
- 10mo 20d
- Reaksiyon Skoru
- 1,304
- Altın Konu
- 2
- Başarım Puanı
- 289
- Yaş
- 26
- MmoLira
- 3,942
- DevLira
- 63
Teşekkürler Kardeşim 

- Katılım
- 12 Ara 2015
- Konular
- 106
- Mesajlar
- 1,849
- Çözüm
- 19
- Online süresi
- 1mo 7d
- Reaksiyon Skoru
- 934
- Altın Konu
- 1
- TM Yaşı
- 10 Yıl 5 Ay 27 Gün
- Başarım Puanı
- 211
- MmoLira
- 1,235
- DevLira
- 165
Teşekkürler
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 27
- Görüntüleme
- 5K
- Cevaplar
- 215
- Görüntüleme
- 50K
- Cevaplar
- 149
- Görüntüleme
- 47K




