Cheat Engine Değer Türleri Açıklaması: Byte, Float, String ve AOB
Byte, 2/4/8 Bytes, Float, Double, String ve Array of byte: her türün neyi sakladığı, işaretli ve işaretsiz farkı, little-endian bayt sırası ve türü bilmediğinde nasıl seçeceğin.
Cheat Engine'deki her tarama iki soru sorar: hangi değeri arıyorsun ve bu değer nasıl saklanıyor? İkinci soru, Value Type açılır menüsüdür ve yanlış türü seçmek bir taramanın hiçbir şey bulamamasının en yaygın nedenidir. Bu rehber her türü, sayıların bellekte nasıl dizildiğini ve oyunun ne kullandığını bilmediğinde nasıl tür seçeceğini anlatıyor.
Örnekler, First Scan ve Next Scan'i nasıl yapacağını bildiğini varsayıyor. Bilmiyorsan yeni başlayanlar için Cheat Engine rehberi ile başla. Her zaman olduğu gibi, bu teknikleri yalnızca tek oyunculu ve çevrimdışı oyunlarda kullan ve bir şeyi değiştirmeden önce kayıtlarını yedekle.
Tür neden önemli?
Bellek, uzun bir bayt dizisinden ibarettir. 1000 sayısı "1", "0", "0", "0" karakterleri olarak saklanmaz; ikili bir desen olarak saklanır ve aynı desen nasıl okuduğuna göre farklı bir anlama gelir. Tam sayı olarak 1000 anlamına gelen dört bayt, float olarak okunursa anlamsız derecede küçük bir sayı olur. Cheat Engine'e türü söylediğinde, her adreste kaç bayt okuyacağını ve bunları nasıl yorumlayacağını söylemiş olursun. Tür yanlışsa yazdığın değer hiçbir zaman eşleşmez.
Türlere genel bakış
| Tür | Boyut | Aralık | Oyunlarda tipik kullanım |
|---|---|---|---|
| Byte | 1 bayt | 0 - 255 (işaretli: -128 - 127) | Bayraklar, küçük sayaçlar, seviyeler, 99 ile sınırlı eşya adetleri |
| 2 Bytes | 2 bayt | 0 - 65,535 (işaretli: -32,768 - 32,767) | Eski oyunlar, statü puanları, envanter yığınları |
| 4 Bytes | 4 bayt | 0 - 4,294,967,295 (işaretli: yaklaşık artı eksi 2,1 milyar) | Para, mermi, tecrübe, çoğu tam sayı |
| 8 Bytes | 8 bayt | 0 - yaklaşık 1,8 x 10^19 (işaretli: yaklaşık artı eksi 9,2 x 10^18) | Çok büyük para birimleri, zaman damgaları, 64 bit oyunlarda işaretçiler |
| Float | 4 bayt | Yaklaşık 7 anlamlı basamak | Can, dayanıklılık, konumlar, hız, zamanlayıcılar |
| Double | 8 bayt | Yaklaşık 15 ila 16 anlamlı basamak | Çift duyarlık kullanan motorlar ve betik çalışma ortamları |
| String | Değişken | Metin, ASCII veya UTF-16 | Karakter adları, eşya adları, diyaloglar |
| Array of byte | Değişken | Herhangi bir bayt dizisi, joker karakterlere izin verilir | Kod imzaları, ham yapılar |
Tam sayı türleri: Byte, 2 Bytes, 4 Bytes, 8 Bytes
Bunlar tam sayılardır: ondalık nokta yok, sadece bir adet var. İsim, her birinin kaç bayt kullandığını söyler. 4 Bytes, Cheat Engine'in varsayılanıdır çünkü modern oyunlarda sayılar için açık ara en yaygın türdür. Yaklaşık 4,29 milyarı aşabilecek bir sayı, örneğin bir idle oyunundaki geç oyun para birimi, 8 Bytes gerektirir. 255'i hiç geçmeyen değerler ise yer kazanmak için, özellikle eski oyunlarda ve açık/kapalı bayraklarında, bazen tek bir Byte içinde tutulur.
İşaretli ve işaretsiz
Aynı bitler işaretli (negatif sayılara izin verir) veya işaretsiz (sıfır ve üzeri) okunabilir. 4 Bytes'ta FF FF FF FF deseni işaretliyken -1, işaretsizken 4,294,967,295'tir. Tarama bit desenini karşılaştırır, bu yüzden bu fark çoğunlukla değerlerin nasıl gösterildiğiyle ilgilidir. Adres listesinde bir girdinin sağ tık menüsünden işaretli ve işaretsiz gösterim arasında geçiş yapabilirsin. Bir değeri sıfırın altına indirdikten sonra aniden çok büyük bir sayı görünüyorsa, ya işaretsiz gösterilen işaretli bir değere bakıyorsun ya da oyunda alt taşma (underflow) olmuş demektir.
Bayt sırası: little-endian ve çözümlü örnek
Windows PC'ler little-endian bayt sırası kullanır: en az anlamlı bayt önce saklanır. Bu, Memory Viewer'ın hex görünümünde belleğe baktığın an ya da elle bir Array of byte deseni yazdığında önem kazanır.
4 Bytes olarak saklanan 1000 sayısını ele alalım:
- 1000'in onaltılık karşılığı
3E8'dir. - Dört bayta tamamlanınca
00 00 03 E8olur; insanların sayıları normalde yazdığı gibi, en anlamlı bayt önce yazılır. - Little-endian bayt sırasını tersine çevirir, yani bellekte
E8 03 00 00görürsün.
Aynı sayı 2 Bytes olarak E8 03, 8 Bytes olarak E8 03 00 00 00 00 00 00'dır. Sadece baytlar ters çevrilir, bir baytın içindeki hex rakamlar asla: E8, E8 olarak kalır.
Float'lar da aynı kuralı izler. 100.0 float'ının bit deseni 42C80000'dır ve bellekte 00 00 C8 42 olarak durur. 1.0 float'ı 3F800000'dır ve 00 00 80 3F olarak saklanır. Bunları elle hesaplamak sıkıcı olur; değer dönüştürücü herhangi bir sayıyı her tür için ondalık, hex ve little-endian baytlar olarak yan yana gösterir.
Kayan noktalı sayılar: Float ve Double
Float'lar kesirli kısmı olan sayıları saklar. Oyunlar bunları düzgün değişen ya da ondalık gereken her şey için kullanır: tick başına 0.3 yenilenen can, bir karakterin X, Y ve Z konumu, hareket hızı, saniye cinsinden bekleme süresi. Üzerinde sayı olmayan bir can çubuğu çoğu zaman bir float'tır; ya gerçek canı (mesela 87.5) ya da 0.0 ile 1.0 arasında bir oranı tutar.
Double aynı fikirdir, ama 8 bayt ve çok daha yüksek hassasiyetle. Oynanış değerleri için daha az oyun kullanır, ama bazı motorlar ve betik çalışma ortamları tüm sayıları double olarak saklar. Ondalıklı bir değer için Float taraması başarısız olursa, sıradaki denemen Double olsun.
Float'lar nadiren tam olduğundan, Cheat Engine kusursuz eşleşme istemez. Float veya Double seçtiğinde tarama panelinde yuvarlama seçenekleri çıkar; varsayılan yuvarlanmış mod, 87 araması yaparken 87.4 gibi değerlerle de eşleşmeni sağlar. Bu bile güvenilir değilse, küçük bir aralıkla Value between tarama türünü kullan ya da Unknown initial value'ya geçip Increased ve Decreased taramalarından yararlan.
Metin: ASCII ve UTF-16 String
String taraması metin arar. Oyunlar metni farklı kodlamalarla saklar ve Cheat Engine seçmene izin verir:
- ASCII veya tek baytlı metin: karakter başına bir bayt. "Hi"
48 69'dur. - UTF-16: karakter başına iki bayt, Windows programlarında ve motorlarda yaygındır. "Hi"
48 00 69 00'dır. Tarama yaparken UTF-16 seçeneğini işaretle.
Büyük/küçük harf duyarlılığı seçeneği de var. Bir karakter adını aramak, o karaktere ait veri yapısını bulmanın hızlı bir yoludur, çünkü statüler genelde yakınlarda saklanır. String değiştirirken dikkatli ol: orijinalinden uzun bir metin yazmak, bellekte onun ardından gelen her şeyin üzerine yazar.
Array of byte (AOB)
Array of byte, hex olarak yazılan ve boşlukla ayrılan kesin bir bayt dizisini arar, örneğin E8 03 00 00. Herhangi bir bayt için joker karakter olarak ?? kullanabilirsin, yani 89 83 ?? ?? 00 00 birkaç varyasyonla eşleşir. AOB'ler oynanış değerlerini doğrudan bulmak için nadiren kullanılır. Asıl işi, yeniden başlatmanın ardından belirli bir oyun kodu parçasını tekrar bulmaktır; Auto Assembler betikleri de yama yaptıkları kodu bu şekilde bulur.
"All" türü
All'u seçtiğinde Cheat Engine değerini birden çok sayısal türde aynı anda arar ve sonuçlar her eşleşmenin hangi tür olarak bulunduğunu gösterir. Hangi türlerin dahil olduğu Cheat Engine ayarlarından değiştirilebilir. All, takıldığında işe yarar ama çok daha fazla sonuç üretir ve daha yavaş çalışır, bu yüzden alışkanlık değil, son çare olarak gör.
Türü bilmediğinde nasıl seçersin?
Bunları sırayla dene ve bir tür başarısız olduğunda her seferinde New Scan başlat:
- Ekranda görünen tam sayı (altın, mermi, skor): 4 Bytes ve Exact Value ile başla.
- Ondalıklı, çubuk olan ya da konum olan her şey: Float dene. Görünür sayı yoksa Unknown initial value kullan.
- Float bir şey bulamadıysa: Double dene.
- 255 veya 65,535'i hiç geçmeyen küçük bir sayı: Byte veya 2 Bytes dene.
- Çok büyük bir sayı: 8 Bytes dene.
- Hâlâ bir şey yok: All dene, sonra ekranda görünen sayının saklanan sayı olup olmadığını yeniden düşün. Oyunlar bazen değeri 10 veya 100 ile çarpıp saklar, kalan miktar yerine maksimumu ve kullanılan miktarı saklar ya da değeri şifreli tutar. Bu durumlarda Increased ve Decreased taramalarıyla Unknown initial value güvenilir yoldur.
Bir aday bulduğunda, adres listesinde değiştirip oyunu izleyerek doğrula, sonra daha sonra hatırlamak için türü girdinin açıklamasına not et.
Özel ve daha az yaygın türler
Cheat Engine'de tek tek bitler için bir Binary türü de var ve küçük bir betikle tanımlanan özel türleri destekliyor. Yeni sürümler bazı özel türleri hazır getirir; örneğin bir oyunun sayıları ters bayt sırasıyla sakladığı nadir durumlar için big-endian varyantları. Bunlara sık ihtiyaç duymayacaksın ama standart türler alışılmadık bir oyunda başarısız olduğunda var olduklarını bilmek işe yarar.
Özet
- Tam sayılar için 4 Bytes, ondalıklar ve çubuklar için Float, sıradaki tahmin olarak Double, küçük değerler için Byte ve 2 Bytes, çok büyükler için 8 Bytes.
- İşaretli ve işaretsiz, aynı bitlerin iki farklı okunuşudur.
- Bellek little-endian'dır: 4 Bytes olarak 1000,
E8 03 00 00'dır. - String'ler ASCII ve UTF-16 olarak gelir; AOB desenleri
??jokerleriyle ham baytları arar. - Bayt dizilimlerini elle hesaplamak yerine kontrol etmek için değer dönüştürücüyü kullan.
Yorumlar
Henüz yorum yok
Düşüncelerini ilk paylaşan sen ol.