Bellek tarayıcı
Cheat Engine mantığıyla değer arama: process spawn et, debugger'a bağlan, değeri tara, daralt, düzenle ve dondur
Bu sayfa laboratuvarın uçtan uca kullanımını anlatır: simüle işletim sisteminde bir process başlatmak, ona debugger bağlamak, bellekte bir değer aramak, sonuçları daraltmak, değeri değiştirmek ve dondurmak.
Mantık Cheat Engine ile aynıdır. Kapsam ise kasıtlı olarak dardır — pointer tarama, kod enjeksiyonu, disassembler eklentileri gibi şeyler yoktur. Amaç, "bir değeri bellekte nasıl bulur ve nasıl sabitlersin" döngüsünün gerçek bir CPU ve gerçek bir adres alanı üzerinde çalıştığını göstermektir.
1. Process başlat
Debugger'ı /tr/ide/debugger adresinden açtığınızda process seçici
karşılar:
- Demo process başlat düğmesi rastgele profilli bir process açar; ana thread entry point'te durur, tek bir instruction bile çalışmamıştır.
- Kenar çubuğundaki process listesinden daha önce açılmış bir process/thread'e geçebilirsiniz.
Açılan her process aynı global makinede yaşamaya devam eder: kendi PID'i, kendi adres alanı, kendi handle tablosu ve thread context'leri vardır. Yeni bir process açmak öncekini silmez.
2. Debugger'a bağlan
Process satırındaki Bağlan düğmesi (veya thread listesinden bir thread'in
Bağlan'ı) debugger'ı o process ve thread'e iliştirir. URL ?pid=…&tid=…
haline gelir — bu bağlantıyı paylaşabilir ya da yer imine ekleyebilirsiniz.
Debugger'dayken üst çubuktaki Process değiştir seçiciye geri döner.
3. İlk taramayı yap
Alt panelde TARAYICI sekmesine geçin.
- Tip: aradığınız değerin genişliği. Sayaç, puan, can gibi şeyler için
genelde
32-bit tam sayıdoğru başlangıçtır. - Karşılaştırma:
Tam değer— değeri biliyorsanız (örneğin ekranda1000yazıyor).Bilinmeyen değer— değeri bilmiyorsanız. Bu, adres alanındaki her hizalanmış adayı işaretler; sonraki taramalarda daraltırsınız. Yalnız sabit genişlikli sayısal tiplerde kullanılabilir, çünkü aranacak bir örüntü yoktur.
- Bölge: taramayı tek bir mapping ile sınırlar. Aradığınız şey heap'teyse
process-heapseçmek taramayı ciddi biçimde hızlandırır. - İlk tarama'ya basın.
Sonuç sayısı sekmenin üstünde görünür. Çok sayıda aday varsa tablo yalnız ilk
sayfayı listeler ve bunu açıkça yazar (… ilk 256 tanesi listeleniyor);
daraltma her zaman adayların tamamı üzerinde çalışır, listelenen sayfa
üzerinde değil.
4. Daralt
Cheat Engine'in asıl gücü buradadır: değeri değiştirin, sonra ne olduğunu tarayıcıya söyleyin.
| Karşılaştırma | Ne zaman |
|---|---|
Tam değer | Yeni değeri tam olarak biliyorsunuz |
Değişti / Değişmedi | Değer değişti mi, bilmiyorsunuz ama yönü önemsiz |
Arttı / Azaldı | Sayaç yukarı ya da aşağı gitti |
Şundan büyük / Şundan küçük | Bir eşiğe göre eliyorsunuz |
Programı biraz ilerletin (F5 devam, F10 üzerinden atla), sonra Sonraki tarama'ya basın. Birkaç turda aday sayısı tipik olarak tek haneye düşer.
Önceki kolonu, adayın bir önceki taramadaki değerini gösterir — Değer kolonu her render'da canlı bellekten yeniden okunurken bu sabit kalır, böylece ikisini karşılaştırabilirsiniz.
Baştan başlamak için Yeni tarama. Tip veya kodlama değiştirmek de aday kümesini sıfırlar, çünkü farklı genişlikteki bir değer için eski adaylar anlamsızdır.
5. Değiştir ve dondur
Sonuç satırındaki düğmeler:
- Git — bellek panelini o adrese götürür, byte'ları hex+ASCII görürsünüz.
- Düzenle — değeri yerinde değiştirir; yazma gerçek adres alanına gider.
- Ekle — adresi sağdaki adres listesine sabitler.
Adres listesindeki her satırın bir Dondur kutusu vardır. İşaretlendiğinde
adres Win64Machine'in freeze kaydına girer ve her thread durağında aynı
byte'lar geri yazılır. Yani process değeri değiştirmeye çalışsa bile değer
sabit kalır — Cheat Engine'in freeze kutusunun yaptığı şeyin aynısı.
Dondurulmuş bir satırın değerini düzenlerseniz freeze yeni değere geçer; eski değere geri sıçramaz.
Neler sahte değil
Panelde gördüğünüz hiçbir sayı önceden yazılmış bir senaryodan gelmez:
- Her aday değeri gerçek
Win64AddressSpace.readçağrısıyla okunur. - Sonuç sayfası her render'da canlı bellekten yeniden okunur; debugger'da bir adım attığınızda değerler anında değişir.
- Düzenleme ve dondurma gerçek belleğe yazar; bir sonraki instruction o byte'ları okur.
Tarayıcının kendisi packages/simulate içindeki Win64MemoryScanner sınıfıdır
ve UI'dan bağımsız olarak test edilir.
Sonraki adımlar
- Win64 Debugger — breakpoint, adımlama ve panellerin tamamı.
- Debugger component API — bu panelleri kendi sayfanıza gömmek.