بازیابی DX-Ball
محاسبه موقعیت صدای چپ / راست.

دستورالعمل های اصلی را بررسی کنید ، ورودی و ثابت ها را شناسایی کنید ، سپس C بازیابی شده را بررسی کنید.

موقعیت صدای استریو چپ/راست را محاسبه کنید

در DX-Ball ، یک ضربه آجری یک موقعیت صفحه افقی را فراهم می کند. کد صدا آن را به یک مقدار پانینگ چپ/راست تبدیل می کند.

تابع شروع, 0x00406400، یک نتیجه کوتاه از کامپایلر دارد: یک تماس به __ftol(). REA همچنین دستورالعمل ها و تماس گیرندگان خود را باز می گرداند که به نماینده راهی برای بررسی حساب گمشده می دهد.

تازه وارد اين اصطلاحات هستي ؟
  • دستورالعمل ها: مراحل اجرا شده توسط پردازنده ، به شکل قابل خواندن نشان داده شده است مانند MOV یا ADD.
  • نتیجه Decompiler / pseudocode: تلاش یک ابزار تجزیه و تحلیل برای تبدیل دستورالعمل ها به کد شبیه 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 : در File Explorer ، روی فایل کلیک راست کرده و انتخاب کنید کپی به عنوان مسیر. در Windows 10 ، هنگام کلیک راست ، Shift را نگه دارید.
  • macOS : در Finder ، روی فایل کلیک راست کنید ، گزینه hold را انتخاب کنید "..." را به عنوان نام مسیر کپی کنید.
  • هر سیستم: فایل را به یک پنجره ترمینال بکشید و مسیر آن ظاهر می شود.

نتایج 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 نماینده شما در حالی که جلسه باز است ، از باینری وارد شده استفاده می کند.

کد شبه را در کنار دستورالعمل ها و مرجع ها بخوانید. وقتی نتیجه یک تماس یا ارزش حل نشده را ترک می کند ، از آن مکان به عنوان سوال بعدی استفاده کنید.

بالا