Hitung posisi suara stereo kiri / kanan
Di DX-Ball, pukulan keras memasok posisi layar horizontal. Kode suara mengubahnya menjadi nilai panning kiri/kanan.
Fungsi awal, 0x00406400, memiliki hasil dekompiler singkat: panggilan ke __ftol(). REA juga mengembalikan instruksi dan fungsi pemanggilnya, yang memberi agen cara untuk menyelidiki aritmatika yang hilang.
Baru mengenal istilah ini?
-
Instruksi: langkah-langkah yang dijalankan prosesor, ditampilkan dalam bentuk yang dapat dibaca seperti
MOVatauADD. - Hasil dekompiler / pseudocode: upaya alat analisis untuk mengubah instruksi kembali menjadi kode mirip C. Itu bisa kehilangan bagian, seperti dalam contoh ini.
- Fungsi pemanggil: sebuah fungsi yang memanggil yang satu ini. Ini menunjukkan nilai mana yang diteruskan.
-
Alamat: lokasi dalam program, ditulis dalam heksadesimal, seperti
0x00406400. - Konstanta: nomor tetap yang disimpan dalam program, dibaca sebagai byte mentah dan diterjemahkan.
Tiga bukti, satu perhitungan
- 01 * InstruksiMasukan bilangan bulatPembacaan tumpukan memasok nilai yang digunakan oleh instruksi floating-point.
-
02 * Fungsi pemanggilKoordinat layarFungsi pemanggil yang dipukul dengan batu bata lolos
20 + 30 × tile_x. -
03 * Byte dataKonstanta numerikByte yang direferensikan didekode ke
1.5625,500.0dan nilai skala.
pan = (x × 1.5625 − 500.0) × scale
Tanyakan tentang perilakunya
Setelah menghubungkan REA ke agen Anda dan menyiapkan alat analisis program kode mesin, berikan executable lokal dan pertanyaan:
Alat analisis mana yang harus saya gunakan?
REA membutuhkan salah satunya untuk membaca program asli:
- Hopper (macOS atau Linux ): Pengaturan REA mendeteksi atau menawarkan untuk menginstalnya. Di macOS, buka Hopper sekali dan pilih mode demo atau aktifkan lisensi sebelum analisis pertama Anda.
- Ghidra ( macOS atau Linux; eksperimental pada Windows): gratis, tetapi membutuhkan Ghidra 12.1 yang sudah ada.instalasi x dan JDK 64-bit 21 atau yang lebih baru.
- IDA ( Windows): untuk pengaturan IDA yang ada dengan pendaftaran MCP.
Lihat Menyiapkan analisis program kode mesin untuk langkah-langkahnya.
Gunakan REA untuk menemukan cara DX-Ball menghitung pemosisian suara stereo. Jelaskan perhitungannya dan tunjukkan kodenya.
Contoh prompt. Berikan agen Anda jalur ke DX-Ball 1.07 lokal Anda yang dapat dieksekusi. REA tidak menyertakan DX-Ball, jadi gunakan salinan Anda sendiri, atau ajukan pertanyaan yang sama tentang program Windows kecil lainnya yang Anda miliki.
Bagaimana cara mendapatkan path lengkap file?
- Windows : di File Explorer, klik kanan file tersebut dan pilih Salin sebagai jalur. Pada Windows 10, tahan Shift sambil mengklik kanan.
- macOS : di Finder, klik kanan file, tahan Opsi, dan pilih Salin " ... " sebagai Nama Jalur.
- Sistem apa pun: seret file ke jendela terminal dan jalurnya muncul.
Baca hasil REA
Baca inputnya
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]
Instruksi memuat argumen integer dan mengubahnya menjadi aritmatika floating-point. Ini adalah input yang tidak ada dari tampilan pseudocode pertama.
Ikuti fungsi pemanggil
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400
REA mengidentifikasi fungsi pemanggil yang terkena pukulan keras. Instruksi sebelumnya mengalikan koordinat ubin dengan 30; menambahkan 0x14 (20) memberikan posisi layar bata.
Baca konstanta yang dirujuk
0x420068 000000000000f93f → 1.5625
0x420070 0000000000407f40 → 500.0
0x4210a0 000000000000f03f → 1.0
Aritmatika mereferensikan alamat-alamat ini. Membaca byte memberikan nilai aktual; urutan instruksi memberi tahu agen bagaimana mereka digunakan.
Tulis dan periksa fungsi yang dipulihkan
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
Dengan skala 1,0, posisi layar 0, 320, dan 640 dipetakan ke -500, 0, dan 500 sebelum konversi bilangan bulat. Perhitungan menempatkan bagian tengah layar di tengah bidang stereo.
Agen menggunakan temuan REA untuk menulis C. Pemeriksaan terpisah membandingkan 3.205 input dengan fungsi x86 asli dan mereproduksi semua 63 byte yang dikompilasi dari fungsi lengkap.
Cobalah dengan biner Anda sendiri
Hubungkan analisis penyedia program kode mesin, lalu berikan agen Anda executable atau pustaka lokal dan fitur untuk diselidiki. Pertanyaan awal yang berguna termasuk "Bagaimana file ini diuraikan?"atau" Fungsi mana yang menangani tindakan menu ini?”
Jika Anda sudah mengetahui nama atau alamat fungsi, Anda dapat menanyakannya dari terminal. Untuk instalasi Ghidra yang dikonfigurasi:
npx -y rea-agents@latest function /absolute/path/to/program main \
--provider ghidra --json
Ganti jalur target dan main dengan nama atau alamat fungsi Anda sendiri. Setiap pemanggilan CLI mengimpor dan menganalisis biner, lalu menutup sesinya. Kueri MCP agen Anda menggunakan kembali biner yang diimpor saat sesi tersebut dibuka.
Baca pseudocode di samping instruksi dan referensi. Saat hasil membuat panggilan atau nilai tidak terselesaikan, gunakan lokasi tersebut sebagai pertanyaan berikutnya.