恢复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上进行实验):免费,但需要现有的Ghidra12.1。x安装和64位JDK21或更高版本。
  • IDA (Windows):用于具有MCP注册的现有IDA设置。

见 设置原生分析 为步骤。

你的编程助手

用 REA 找出 DX-Ball 如何计算声音的左右位置。解释计算过程,并展示代码。

示例 prompt。把本地 DX-Ball 1.07 可执行文件的路径交给助手。REA 不附带游戏,需要用自己的副本,也可以换成手里的其他小型 Windows 程序,问同类问题。

如何获取文件的完整路径?
  • Windows : 在文件资源管理器中,右键单击该文件并选择 复制为路径. 在Windows10上,在右键单击时按住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字节结果 · 解释为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。 计算将屏幕的中心置于立体场的中心。

编程助手使用REA的发现来编写C.单独的检查将3,205个输入与原始x86函数进行了比较,并再现了完整函数的所有63个编译字节。

查看完整的调查和组装到C的比较

用你自己的二进制文件试试

连接原生分析提供程序,然后给你的编程助手一个本地可执行文件或库和一个要调查的函数。 有用的起始问题包括"如何解析此文件?"或"哪个函数处理此菜单操作?”

如果你已经知道函数名称或地址,则可以从终端查询它。 对于已配置的Ghidra安装:

函数分析
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

替换目标路径和 main 使用你自己的函数名称或地址。 每个 CLI 调用导入并分析二进制文件,然后关闭其会话。 你的编程助手 MCP 查询在该会话打开时重用导入的二进制文件。

把伪代码与指令、引用一起阅读。结果中尚未解析的调用或数值,可以成为下一个调查问题。

顶部