Розрахувати розташування стереозвуку зліва / справа
У DX-Ball удар цегли задає горизонтальне положення екрану. Звуковий код перетворює його в значення повороту вліво / вправо.
Початкова функція, 0x00406400, видає короткий результат декомпіляції: виклик функції __ftol(). REA також повертає свої інструкції та пристрої виклику, які дають агенту можливість знайти відсутню арифметику.
Ви знайомі з цими умовами?
-
Інструкція: кроки, які виконує процесор, відображаються у зручній для читання формі, такій як
MOVабоADD. - Результат декомпіляції / псевдокод: спроба інструменту аналізу перетворити інструкції назад у C-подібний код. У ньому можуть бути відсутні окремі частини, як у цьому прикладі.
- Викликаюча функція: функція, яка викликає цю функцію. Вона показує, які значення передаються.
-
Адрес: розташування в програмі, записане в шістнадцятковому форматі, наприклад,
0x00406400. - Константа: фіксовані числа, що зберігаються в програмі, зчитуються як необроблені байти та декодуються.
Три докази, один розрахунок
- 01 * інструкції Ціле введення, прочитаний стеком, надає значення, яке використовується інструкціями з плаваючою комою.
-
02 * Абонент - Екранна координата, по якій абонент, що вдарився цеглою, проходить
20 + 30 × tile_x. -
03 * байти даних Числова константа, на які посилаються байти, декодуються як
1.5625,500.0і масштабне значення.
pan = (x × 1.5625 − 500.0) × scale
Запитайте про поведінку
Після підключення REA до вашого агента і налаштування інструменту аналізу програм з машинним кодом надайте локальний виконуваний файл та запитання:
Який інструмент аналізу слід використовувати?
REA потрібен один з них для читання власних програм:
- Hopper (macOS або Linux ): програма встановлення REA виявляє його або пропонує встановити. На macOS відкрийте Hopper один раз і виберіть демонстраційний режим або активуйте ліцензію перед першим аналізом.
- Ghidra (macOS або Linux ; експериментальна версія Windows ): безкоштовний, але вимагає існуючої установки Ghidra 12.1.x і 64-розрядної версії JDK 21 або новіше.
- IDA (Windows): для існуючого Налаштування IDA з реєстрацією MCP.
Інструкції по налаштуванню аналізу програм з машинним кодом наведені в розділі Налаштування аналізу програм з машинним кодом.
Використовуйте REA, щоб дізнатися, як DX-Ball обчислює розташування стереозвуку. Поясніть розрахунок і покажіть код.
Приклад запиту. Вкажіть своєму агенту шлях до локального виконуваного файлу DX-Ball 1.07. REA не включає DX-Ball, тому використовуйте власну копію або задайте те саме питання про іншу невелику програму Windows, яку ви маєте.
Як отримати повний шлях до файлу?
- Windows : у Провіднику файлів клацніть правою кнопкою миші файл і виберіть "Копіювати як шлях". На Windows 10, утримуючи Shift, клацніть правою кнопкою миші.
- macOS : у Finder клацніть файл правою кнопкою миші, утримуйте опцію та виберіть Копіювати "..."як шлях.
- Будь-яка система: перетягніть файл у вікно терміналу, і з'явиться шлях до нього.
Ознайомтеся з результатами REA
Прочитайте вхідні дані
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]
Інструкції завантажують цілий аргумент і перетворюють його в арифметику з плаваючою комою. Це вхідні дані, відсутні в першому поданні псевдокоду.
Слідуйте за абонентом
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400
REA ідентифікує об'єкт, на який впала цегла. У попередніх інструкціях координату плитки множили на 30; додавання 0x14 (20) дає положення цегли на екрані.
Прочитайте зазначені константи
0x420068 000000000000f93f → 1.5625
0x420070 0000000000407f40 → 500.0
0x4210a0 000000000000f03f → 1.0
Арифметика посилається на ці адреси. Зчитування байтів дозволяє отримати фактичні значення; порядок команд повідомляє агенту, як вони використовуються.
Запишіть і перевірте відновлену функцію
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
При масштабі 1,0 позиції екрану 0, 320 і 640 перетворюються в -500, 0 і 500 до перетворення в ціле число. При обчисленні центр екрану виявляється в центрі стереополя.
Агент використовував результати REA для написання коду C. окремі перевірки порівняли 3205 входів з оригінальною функцією x86 і відтворили всі 63 скомпільовані байти повної функції.
Спробуйте це за допомогою власного двійкового коду
Підключіть Постачальника програм для аналізу машинного коду, потім надайте своєму агенту локальний виконуваний файл або бібліотеку та функцію для вивчення. Корисні початкові запитання включають “як обробляється цей файл?"або" яка функція виконує цю дію в меню?”.
Якщо ви вже знаєте назву функції або адресу, ви можете запитати її з терміналу. Для налаштованої установки Ghidra:
npx -y rea-agents@latest function /absolute/path/to/program main \
--provider ghidra --json
Замініть цільовий шлях і main на своє власне ім'я функції або адресу. Кожен виклик CLI імпортує та аналізує двійковий файл, а потім закриває свій сеанс. Запити вашого агента MCP повторно використовують імпортований двійковий файл, поки цей сеанс відкритий.
Прочитайте псевдокод разом з інструкціями та посиланнями. Якщо в результаті залишається невирішеним питання про виклик або значення, використовуйте це місце як наступне запитання.