DX-Ball'NUN kurtarma
sol / sağ ses konumunun hesaplanması.

Orijinal talimatları inceleyin, girişi ve sabitleri belirleyin, ardından kurtarılan C'yi kontrol edin.

Sol / sağ stereo ses konumlandırmasını hesapla

DX-Ball'DA bir tuğla vuruşu yatay bir ekran konumu sağlar. Ses kodu onu sola / sağa kaydırma değerine dönüştürür.

Başlangıç işlevi 0x00406400olan 0x00406400, kısa bir ayrıştırıcı sonucuna sahiptir: __ftol() çağrısı. REA ayrıca aracıya eksik aritmetiği araştırmanın bir yolunu veren talimatlarını ve arayanlarını da döndürür.

Bu şartlarda yeni misiniz?
  • Talimatlar: işlemcinin çalıştırdığı adımlar, MOV veya ADD gibi okunabilir biçimde gösterilir.
  • Decompiler sonucu / sözde kod: bir analiz aracının talimatları tekrar C benzeri koda dönüştürme girişimi. Bu örnekte olduğu gibi parçaları kaçırabilir.
  • Arayan: bunu çağıran bir işlev. Hangi değerlerin iletildiğini gösterir.
  • Adres: programdaki 0x00406400 gibi onaltılık yazılmış bir 0x00406400.
  • Sabitler: programda saklanan, ham bayt olarak okunan ve kodu çözülen sabit sayılar.

Üç kanıt, bir hesaplama

  1. 01 * Yönergeler Bir tamsayı girişi Yığın okuması, kayan nokta yönergelerinin kullandığı değeri sağlar.
  2. 02 * Arayan Bir ekran koordinatı Tuğlaya çarpan arayan 20 + 30 × tile_x.
  3. 03 * Veri baytları Başvurulan baytların sayısal sabitleri 1.5625, 500.0'a ve bir ölçek değerine çözülür.

pan = (x × 1.5625 − 500.0) × scale

REA yönergeleri, işlev çağrısı ilişkisini ve baytları sağlar. Ajan onları birlikte yorumluyor.

Davranış hakkında soru sorun

REA'YU aracınıza bağladıktan ve makine kodu programlarının analizi aracını kurduktan sonra, yerel yürütülebilir dosyayı ve bir soruyu sağlayın:

Hangi analiz aracını kullanmalıyım?

REA, yerel programları okumak için bunlardan birine ihtiyaç duyar:

  • Hopper (macOS veya Linux): REA'NUN kurulumu onu algılar veya kurmayı teklif eder. macOS'DA Hopper'YU bir kez açın ve ilk analizinizden önce demo modunu seçin veya bir lisansı etkinleştirin.
  • Ghidra (macOS veya Linux; Windows üzerinde deneysel): ücretsiz, ancak mevcut bir Ghidra 12.1'e ihtiyacı var.x kurulum ve 64 bit JDK 21 veya daha yenisi.
  • IDA (Windows): MCP kaydı olan mevcut bir IDA kurulumu için.

Adımlar için Makine kodu programlarının analizini ayarlama konusuna bakın.

Kodlama aracınız

DX-Ball'NUN stereo ses konumlandırmasını nasıl hesapladığını bulmak için REA kullanın. Hesaplamayı açıklayın ve kodu gösterin.

Örnek istemi. Aracınıza yerel DX-Ball 1.07 yürütülebilir dosyanızın yolunu verin. REA, DX-Ball içermez, bu nedenle kendi kopyanızı kullanın veya sahip olduğunuz başka bir küçük Windows programı hakkında aynı tür soruları sorun.

Bir dosyanın tam yolunu nasıl alabilirim?
  • Windows: Dosya Gezgini'nde dosyayı sağ tıklatın ve Yol olarak kopyala'yı seçin. Windows 10'da sağ tıklarken Shift tuşunu basılı tutun.
  • macOS: Finder'da dosyaya sağ tıklayın, Seçeneği basılı tutun ve Yol Adı olarak "..." Kopyala'yı seçin.
  • Herhangi bir sistem: dosyayı bir terminal penceresine sürükleyin ve yolu görünür.

REA sonuçlarını okuyun

Girişi oku

REA talimat alıntısı * 0x406409
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]

Talimatlar bir tamsayı argümanı yükler ve kayan nokta aritmetiği için dönüştürür. Bu, ilk sözde kod görünümünde bulunmayan girdidir.

Arayanı takip et

REA arayan alıntı * 0x411f5b
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400

REA, tuğlaya çarpan arayanı tanımlar. Önceki talimatları döşeme koordinatını 30 ile çarpar; 0x14 (20) eklemek tuğlanın ekran konumunu verir.

Başvurulan sabitleri okuyun

REA bayt sonuçları * küçük endian çiftleri olarak yorumlanır
0x420068  000000000000f93f  → 1.5625
0x420070  0000000000407f40  → 500.0
0x4210a0  000000000000f03f  → 1.0

Aritmetik bu adreslere başvurur. Baytları okumak gerçek değerleri sağlar; talimat sırası aracıya bunların nasıl kullanıldığını söyler.

Kurtarılan işlevi yazın ve kontrol edin

Kurtarılan C * alıntı
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;

1.0 ölçeğiyle, 0, 320 ve 640 ekran konumları, tamsayı dönüşümünden önce -500, 0 ve 500 ile eşleşir. Hesaplama, ekranın merkezini stereo alanın ortasına yerleştirir.

Aracı kullandı REA C'yi yazmak için bulguları. Ayrı kontroller, 3.205 girişi orijinal x86 işleviyle karşılaştırdı ve tam işlevin derlenmiş 63 baytının tümünü yeniden üretti.

Tüm inceleme ve assembly-to-C karşılaştırmasına bakın

Kendi ikili dosyanızla deneyin

Makine kodu programları sağlayıcısının bir analizini bağlayın, ardından aracınıza yerel bir yürütülebilir dosya veya kitaplık ve araştırılacak bir özellik verin. Faydalı başlangıç soruları arasında "Bu dosya nasıl ayrıştırılır?" veya "Bu menü eylemini hangi işlev işler?”

Bir işlev adını veya adresini zaten biliyorsanız, bunu terminalden sorgulayabilirsiniz. Yapılandırılmış bir Ghidra kurulumu için:

Fonksiyon analizi
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

Hedef yolu ve main yolu kendi işlev adınız veya adresinizle değiştirin. Her CLI çağrısı ikili dosyayı içe aktarır ve analiz eder, ardından oturumunu kapatır. Aracınızın MCP sorguları, oturum açıkken içe aktarılan ikili dosyayı yeniden kullanır.

Talimatlar ve referanslarla birlikte sözde kodu okuyun. Bir sonuç bir çağrıyı veya değeri çözümsüz bıraktığında, bir sonraki soru olarak bu konumu kullanın.

Üst