程序原理是在“沙箱”中启动游戏程序。游戏程序的内存对于Linalter可读写。
安装方法:
方法A:安装本帖子所附的deb。
方法B:
代码: 全选
svn checkout http://linalter.googlecode.com/svn/trunk/ linalter-read-only
cd linalter-read-only
sudo make install
下面举例说明如何在“GNOME-俄罗斯方块”改出一万分。
打开终端,运行
linalter `which gnometris`
或者运行
linalter /usr/games/gnometris
开始玩俄罗斯方块,在得40分后暂停游戏。 在终端中输入命令
f 40
输出
Result Set "r1", 98266 addrs, "f 40", since 20:48
表示找到了 98266 处内存值是40。
接着玩到80分,再暂停游戏。 在终端中输入命令
f 80
输出
Result Set "r2", 33832 addrs, "f 80", since 20:48
输入命令
^ r1 r2
表示求两个集合的交集。 道理如下:“俄罗斯方块”中保存分数的内存是固定的。假设这个内存地址为M。那么第一次查询,M包含在r1中,第二次查询,M包含在r2中。那么M必然包含在r1和r2的交集。
果然,结果为
Result Set "r3", 1 addrs, "^ r1 r2", since 20:48
只包含一个内存地址。
再输入命令
r3
输出
Result Set "r3", 1 addrs, "^ r1 r2", since 20:48
pid address
4967 21c8100
这就是保存分数的内存。
再执行命令
set 4967 21c8100 10000
然后在“俄罗斯方块”中消去一行,分数就变成 10040。如图 4.png 中所示。 接下来详细说明 linalter 的用法:
1.启动:
linalter 游戏程序 参数
游戏程序要用全路径。
“参数“传给游戏程序的参数。
例如
linalter /usr/games/cuyo -s
linalter `which cuyo` -s
2.指令:
linalter启动后,出现“>”提示符。以下是各种指令:
f 十进制数值
在全部内存中查找指定数值。查找的结果自动新建保存到一个结果集(Result Set)里。
set 十进制pid 十六进制地址 十进制数值
set 十进制pid 十六进制地址 十进制数值 数值的长度
修改指定内存。
例如 set 4967 21c8100 10000
数值的长度一般不用指定。值为1、2、4、8。
rs
打印出所有结果集(Result Set)。每行打印一个。信息为:含有多少个地址、用什么命令创建的、创建的时间。
r1
打印指定的Result Set。打印此Result Set所包含的前十个地址。
命令的名称就是结果集的名称。 例如 r1、r2 都是命令。
^ r1 r2
求交集。结果保存在一个新的Result Set里。
del r1
删除一个Result Set以释放内存。
t
列出游戏进程以及游戏进程的所有子进程的pid。不常用的指令。
vma
列出游戏进程以及游戏进程的所有子进程的vma(虚拟内存区域)。不常用的指令。
q
退出 linalter,并退出游戏。
?
h
列出所有可用的指令,和简短的指令说明。