Відновити дані DX-Ball
розрахунок положення звуку зліва / справа.

Перегляньте оригінальні інструкції, визначте вхідні дані та константи, а потім перевірте відновлений C.

Розрахувати розташування стереозвуку зліва / справа

У DX-Ball удар цегли задає горизонтальне положення екрану. Звуковий код перетворює його в значення повороту вліво / вправо.

Початкова функція, 0x00406400, видає короткий результат декомпіляції: виклик функції __ftol(). REA також повертає свої інструкції та пристрої виклику, які дають агенту можливість знайти відсутню арифметику.

Ви знайомі з цими умовами?
  • Інструкція: кроки, які виконує процесор, відображаються у зручній для читання формі, такій як MOV або ADD.
  • Результат декомпіляції / псевдокод: спроба інструменту аналізу перетворити інструкції назад у C-подібний код. У ньому можуть бути відсутні окремі частини, як у цьому прикладі.
  • Викликаюча функція: функція, яка викликає цю функцію. Вона показує, які значення передаються.
  • Адрес: розташування в програмі, записане в шістнадцятковому форматі, наприклад, 0x00406400.
  • Константа: фіксовані числа, що зберігаються в програмі, зчитуються як необроблені байти та декодуються.

Три докази, один розрахунок

  1. 01 * інструкції Ціле введення, прочитаний стеком, надає значення, яке використовується інструкціями з плаваючою комою.
  2. 02 * Абонент - Екранна координата, по якій абонент, що вдарився цеглою, проходить 20 + 30 × tile_x.
  3. 03 * байти даних Числова константа, на які посилаються байти, декодуються як 1.5625, 500.0 і масштабне значення.

pan = (x × 1.5625 − 500.0) × scale

REA надає інструкції, зв'язок між викликами функцій і байти. Агент інтерпретує їх разом.

Запитайте про поведінку

Після підключення 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

Прочитайте вхідні дані

REA витяг з інструкції * 0x406409
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]

Інструкції завантажують цілий аргумент і перетворюють його в арифметику з плаваючою комою. Це вхідні дані, відсутні в першому поданні псевдокоду.

Слідуйте за абонентом

REA запит абонента * 0x411f5b
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400

REA ідентифікує об'єкт, на який впала цегла. У попередніх інструкціях координату плитки множили на 30; додавання 0x14 (20) дає положення цегли на екрані.

Прочитайте зазначені константи

Результати в байтах REA * інтерпретуються як подвоєння в порядку зменшення
0x420068  000000000000f93f  → 1.5625
0x420070  0000000000407f40  → 500.0
0x4210a0  000000000000f03f  → 1.0

Арифметика посилається на ці адреси. Зчитування байтів дозволяє отримати фактичні значення; порядок команд повідомляє агенту, як вони використовуються.

Запишіть і перевірте відновлену функцію

Відновлений уривок з C ·
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 скомпільовані байти повної функції.

Дивіться повне дослідження та порівняння збірки з C

Спробуйте це за допомогою власного двійкового коду

Підключіть Постачальника програм для аналізу машинного коду, потім надайте своєму агенту локальний виконуваний файл або бібліотеку та функцію для вивчення. Корисні початкові запитання включають “як обробляється цей файл?"або" яка функція виконує цю дію в меню?”.

Якщо ви вже знаєте назву функції або адресу, ви можете запитати її з терміналу. Для налаштованої установки Ghidra:

Функціональний аналіз
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

Замініть цільовий шлях і main на своє власне ім'я функції або адресу. Кожен виклик CLI імпортує та аналізує двійковий файл, а потім закриває свій сеанс. Запити вашого агента MCP повторно використовують імпортований двійковий файл, поки цей сеанс відкритий.

Прочитайте псевдокод разом з інструкціями та посиланнями. Якщо в результаті залишається невирішеним питання про виклик або значення, використовуйте це місце як наступне запитання.

Топ