복구 DX-Ball의
사운드 팬 계산.

원래 명령어를 검사하고 입력 및 상수를 식별 한 다음 복구 된 C을 확인하십시오.

왼쪽/오른쪽 스테레오 사운드 위치 계산

그 안에 DX-Ball,벽돌 타격은 수평 화면 위치를 제공합니다. 사운드 코드는 왼쪽/오른쪽 패닝 값으로 바뀝니다.

시작 기능, 0x00406400,짧은 디컴파일러 결과가 있습니다. __ftol(). REA 또한 지시 사항과 호출자를 반환합니다.이는 에이전트에게 누락된 계산을 조사하는 방법을 제공합니다.

이 약관에 새로운?
  • 지침: 프로세서가 실행하는 단계는 다음과 같이 읽을 수 있는 형태로 표시됩니다. MOV 또는 ADD.
  • 디 컴파일러 결과/의사 코드: 명령어를 다시 씨와 같은 코드로 바꾸려는 분석 도구의 시도. 이 예제에서와 같이 부품을 놓칠 수 있습니다.
  • 호출자: 이 함수를 호출하는 함수입니다. 어떤 값이 전달되는지 보여줍니다.
  • 주소: 프로그램에서 16 진수로 작성된 위치 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.64 비트 또는 그 이상.
  • IDA (Windows):기존의 IDA 설치 MCP 등록.

보시다시피 기계 코드 프로그램 분석 설정 단계를 위해.

코딩 에이전트

사용 REA 방법을 찾으려면 DX-Ball 사운드 패닝을 계산합니다. 계산을 설명하고 코드를 보여줍니다.

예 프롬프트. 너의 대리인에게 너의 지방 주민에 경로를 주십시요 DX-Ball 1.07 실행 파일. REA 포함하지 않습니다 DX-Ball,그래서 당신 신 사,또는 다른 대 문 같 류 Windows 당신이 가진 프로그램.

파일의 전체 경로를 어떻게 얻을 수 있습니까?
  • Windows: 파일 탐색기에서 파일을 마우스 오른쪽 단추로 클릭하고 다음을 선택합니다 경로로 복사. 시작 Windows 10,마우스 오른쪽 버튼을 클릭하는 동안 이동을 누르고 있습니다.
  • macOS: 파인더에서 파일을 마우스 오른쪽 단추로 클릭하고 옵션을 누른 다음 선택합니다 경로 이름으로"..."복사.
  • 모든 시스템: 파일을 터미널 창으로 드래그하면 해당 경로가 나타납니다.

읽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바이트로 결합하는 것으로 해석 little-endian 복식
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 으로 매핑됩니다. 계산은 화면의 중심을 스테레오 필드의 중앙에 놓습니다.

사용 된 에이전트 REA3,205 개의 입력을 원래의 86 함수와 비교하고 전체 함수의 63 개의 컴파일된 바이트를 모두 재현했습니다.

전체 조사 및 어셈블리 간 비교를 참조하십시오

자신의 바이너리 그것을 시도

기계 코드 프로그램 공급자의 분석을 연결,그런 다음 에이전트에 로컬 실행 파일 또는 라이브러리와 조사 할 기능을 제공하십시오. 유용한 시작 질문에는"이 파일은 어떻게 분석됩니까?"또는"이 메뉴 동작을 처리하는 기능은 무엇입니까?”

함수 이름 또는 주소를 이미 알고 있는 경우 터미널에서 쿼리할 수 있습니다. 구성된 Ghidra 설치:

기능 분석
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

대상 경로를 대체하고 main 자신의 함수 이름 또는 주소로. 각 CLI 호출은 바이너리를 가져오고 분석 한 다음 세션을 닫습니다. 귀하의 에이전트의 MCP 쿼리는 해당 세션이 열려 있는 동안 가져온 바이너리를 다시 사용합니다.

지침 및 참조와 함께 의사 코드를 읽으십시오. 결과에서 호출 또는 값이 해결되지 않으면 해당 위치를 다음 질문으로 사용합니다.

상단