使用校内日常能接触到的计算器,就能探索各种可能。我整理了fx-es(ms)吧的内容,包含一些原理与少量资源。目前我接触到的功能主要是拼字(显示字符)。
fx-es(ms)吧https://tieba.baidu.com/f?kw=fx-es(ms)
基本术语请参照该知乎专栏。
我的真机是verF的,因此我将主要讲解verF的各种操作。
卡西欧非官方说明书
原版的说明书详细讲述了正常使用该计算器的方法。我的术语打算尽量和这个说明书保持一致。
(原)官方说明书链接https://support.casio.com/cn/manual/004/fx-991CN_X_B_CN.pdf
但是可惜这款计算器似乎已经退出了历史舞台,官网上看不到这款计算器的说明书了。网上可以找到几乎相同的说明书,虽然页码会有约1页的偏差。
非官方说明书链接https://usermanual.wiki/Casio/fx991CNXCN.1414810318.pdf
模拟器
在贴吧中,有个帖子提供了一个verC模拟器,可以查看计算器ui、ram、反汇编、寄存器等,发布在了github上。
模拟器贴吧帖子https://tieba.baidu.com/p/8926661352github上的模拟器
https://github.com/qiufuyu123/CasioEmuNeo
对release,下载最新的合适的zip,解压出来即可使用。
对源码,可以建议取disas,即下文的反汇编。
注意模拟器并非完美:
- 栈指针,在真机上似乎不能被设为奇数,但在模拟器上可以。这会使一些bug在真机上可以,但模拟器会白屏。
- 模拟器没有太阳能板。
ROM(verF)
如果你的计算器也是verF,那么需要替换rom(和反汇编)。有个帖子提供了一份verF的rom。
verF的rom所在帖子https://tieba.baidu.com/p/9088790345百度网盘上的verF的rom
https://pan.baidu.com/share/init?surl=7UfhKvuF-clKAn2dgnvQtA&pwd=ozxN
反汇编(verF)
如果你的计算器也是verF,那么替换反汇编后,你能更方便地建立verC地址与verF地址地映射。
在上文模拟器的源码中,disas文件夹存储了好用的反汇编的工具。下载解压后,按照源码最外层文档中的方法,在解压后文件夹内运行make。需要进行反汇编时,运行:
./bin/u8-disas (rom.bin所在地址) 0 0x40000 (_disas.txt生成地址)
此处make时可能会出现如下错误,但我用起来似乎没有问题。
process_begin: CreateProcess(NULL, rm -f temp.cpp, ...) failed.
make (e=2): 系统找不到指定的文件。
make: *** [bin/u8-disas] 错误 2
某github仓库
github上有个资料整理,可以去查看。
github上的991CN X 反编译及资料整理https://github.com/Physics365/991CN-X-CW-Decompilation
nX-U16芯片的文档
据说卡西欧用的CPU是nX-U16(*)。一个帖子上分享了该CPU的中英双语文档。
*:有人说nX-U8,但区别不大。一个区别是栈指针在nX-U16上只能为偶数,但nX-U8上可以不。
nX-U16文档所在帖子https://tieba.baidu.com/p/9121129738nX-U16文档帖子包含的短链接
http://jump.bdimg.com/safecheck/index?url=rN3wPs8te/oulvKfWxxHh/2KOtrc97ZuQDa2TMOI6IA6CZ0oV2OuwmtkE0aaCAZLBHEqHEdCFOeMBFM8w2SpkjKxEyZiozsx8AJZZ8wmRnLXAECtdKsibOwW9L6au+Rao6saMhZiQ62IG+gclE+Y5VQJrEN/P+OLnoDPyD4Wemb4rSaPnYHfM6jiCjArzjc4v6KgYV4yfMptdVX5lRHxL88/Jge/z6btD7B/9uS0Lcnt5FetjLVfKy0pWME7HeUJyJImc0dE9RS7Oa6IoX7E+Gl1lYflcDg9vZaAairVvwaufkltWyWP7/eTs9xxhJy2hqSLu/+J0Xa4SjHN9tW1KA==nX-U16文档帖子的长链接
https://ipho365-my.sharepoint.com/personal/ding_ipho365_onmicrosoft_com/_layouts/15/onedrive.aspx?id=%2Fpersonal%2Fding_ipho365_onmicrosoft_com%2FDocuments%2FnX-U16%20%20Instruction%20Manual.pdf&parent=%2Fpersonal%2Fding_ipho365_onmicrosoft_com%2FDocuments&ga=1
一些小教程
我也是看这些教程了解到计算器ROP的。知乎文章1,第1部分https://zhuanlan.zhihu.com/p/618704031