Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

教程内容请求 #24

Open
Physics365 opened this issue Apr 6, 2024 · 35 comments
Open

教程内容请求 #24

Physics365 opened this issue Apr 6, 2024 · 35 comments
Labels
先可以看看 | Good First Issue 给新来的朋友们看看 需要协助 | Help Wanted 可能需要来自其他人的更多帮助来解决

Comments

@Physics365
Copy link
Owner

Physics365 commented Apr 6, 2024

教程内容请求

大家对教程内容有什么补充的要求,可以补充在这个Issue里
分为两个部分:

  1. 缺失知识点/模块(如缺失Σ溢出的方法)
  2. 缺失对内容的解释(看不懂)
  3. 排版建议

Contributors直接更新下面我的评论2,3,4即可。(请使用任务列表)

@Physics365
Copy link
Owner Author

Physics365 commented Apr 6, 2024

缺失知识点/模块

@Physics365
Copy link
Owner Author

Physics365 commented Apr 6, 2024

缺失对内容的解释

@Physics365
Copy link
Owner Author

Physics365 commented Apr 6, 2024

排版建议

  • 精简不必要的章节分割(详见讨论页
  • 更好的练习/例题体系:在正文中穿插讲解例题,在章末留下练习,在附录留下练习解答。
  • (可选)更直观的计算器操作讲解形式(详见讨论页

@Wenti-D Wenti-D pinned this issue Apr 7, 2024
@Wenti-D Wenti-D added 需要协助 | Help Wanted 可能需要来自其他人的更多帮助来解决 先可以看看 | Good First Issue 给新来的朋友们看看 labels Apr 10, 2024
@fish4terrisa-MSDSM

This comment was marked as duplicate.

@fish4terrisa-MSDSM

This comment was marked as duplicate.

@Wenti-D
Copy link
Collaborator

Wenti-D commented Apr 13, 2024

觉得现有建议不妥或不予考虑的话可以像这样划掉

@EwTE-H
Copy link
Collaborator

EwTE-H commented Apr 19, 2024

觉得教程有要补充的就直接写上去好了,其实没必要开issue

@EwTE-H
Copy link
Collaborator

EwTE-H commented Apr 19, 2024

rop基本原理的教程已经写好了。我的水平只能做这么多,剩余的部分,只好以俟君子,@Xyzstk 能否帮助一下?

@fish4terrisa-MSDSM
Copy link
Collaborator

觉得教程有要补充的就直接写上去好了,其实没必要开issue

实际上是因为我也不太会!的说!

@fish4terrisa-MSDSM
Copy link
Collaborator

现在教程里缺一大块rop的内容,由于我自己也不会,所以没法写,@Xyzstk 能否帮助一下

大佬已经很厉害了(那个内存修改器就很好的说

@Wenti-D
Copy link
Collaborator

Wenti-D commented Apr 19, 2024

觉得教程有要补充的就直接写上去好了,其实没必要开issue

这地方倒是更像一个「待办事项清单」😂

@EwTE-H
Copy link
Collaborator

EwTE-H commented Apr 19, 2024

@qiufuyu123 教程需要补一些例子,你看下能不能直接把知乎文章弄过来(我没账号看不了知乎)

@qiufuyu123
Copy link
Collaborator

qiufuyu123 commented Apr 19, 2024

ok,就是rop那一部分是吧?但是知乎没法直接导出markdown,得等我复制粘贴一遍 🥲

不过我找到自动导出工具了

@qiufuyu123
Copy link
Collaborator

qiufuyu123 commented Apr 19, 2024

md文件在这里

commit

这里只提交了md文件,资源(jpg)存储在云盘,见下方

image

@EwTE-H

@fish4terrisa-MSDSM
Copy link
Collaborator

觉得教程有要补充的就直接写上去好了,其实没必要开issue

这地方倒是更像一个「待办事项清单」😂

是不是可以放到github的project里。。。不过classic的project我没找到就是了

@telecomadm1145
Copy link

缺失知识点/模块

* [ ]  缺失Σ溢出的方法

* [ ]  缺失按键检测原理(KI KO那个)

* [ ]  缺失刷各种数量的字符的专题

* [ ]  指出地址的储存、打出与使用方法(小端序)

* [x]  [https://github.com/Physics365/991CN-X-CW-Decompilation/blob/main/ROP/复杂ROP程序/fx991cnx/内存写入/quickcpy_0xd820.bin](https://github.com/Physics365/991CN-X-CW-Decompilation/blob/main/ROP/%E5%A4%8D%E6%9D%82ROP%E7%A8%8B%E5%BA%8F/fx991cnx/%E5%86%85%E5%AD%98%E5%86%99%E5%85%A5/quickcpy_0xd820.bin) 处的文件在lfs变基时丢失

* [ ]  卡西欧991cnx的许多内置的未列出的字符的功能(比如81的(/@是平方和),可以单独列个表的说。不需要长的ropchain也能用说实在有些时候很方便的说,比如Intg(,可以直接算[x]的说

@Physics365

对于按键检测的话,可以去搜搜矩阵键盘扫描,rom也dump了,也有ghidra,可以看看源代码?

刷字符真的没必要,quickcpy/4d变量+字符表搞定

地址只是采用了小端序表示而已,你只要点出是和字节自然书写顺序相反就行了
比如0x11223344只要点出其字节表示为:
44 33 22 11就行了

没必要列出991cnx的未使用字符功能,使用这些未使用字符的功能也麻烦很多(CWII就更不要说了),也不会有多出Rom能力之外的功能(比如Gamma),并且根据Rom不同可能性质也不同
不过Intg(这样的应该是卡西欧程序员懒得删了,因为这种代码可能被程序的其他地方使用(比如Fix数位显示代码),删除了不会减少多少rom大小
像大Π这样的就彻底被移除了,不过还是可以用e sigma ln这样的方法来算,其实影响不大

题外话,楼主是最近在学日语ですかdesuka
"的说"这个口癖影响我理解语句了

@telecomadm1145
Copy link

另外,建议移除无意义的乱码字符,这些乱码字符会影响CWII的学习,因为CWII采用了新的一二级转换表,没有之前的bug了
不过乱码字符的特性确实可以很方便的看出来字符的二进制表示...
另外试试将一二级字符表做成纯文字版,加上字体?(这个是可行的,一级字符显示前会被转换为二级字符)
此外,一级字符和二级字符,多字节双字节字符 控制字符之类的字符的命名问题应该需要探讨一下(毕竟这些其实是历史遗留),这些很容易误导新手理解

我的建议是:
一级字符改为: 算术字符
二级字符改为: 显示字符
双字节字符改为: 双字节(算术)字符
控制字符改为: ROP函数(gadget)

这个可以讨论一下

@fish4terrisa-MSDSM
Copy link
Collaborator

缺失知识点/模块

* [ ]  缺失Σ溢出的方法

* [ ]  缺失按键检测原理(KI KO那个)

* [ ]  缺失刷各种数量的字符的专题

* [ ]  指出地址的储存、打出与使用方法(小端序)

* [x]  [https://github.com/Physics365/991CN-X-CW-Decompilation/blob/main/ROP/复杂ROP程序/fx991cnx/内存写入/quickcpy_0xd820.bin](https://github.com/Physics365/991CN-X-CW-Decompilation/blob/main/ROP/%E5%A4%8D%E6%9D%82ROP%E7%A8%8B%E5%BA%8F/fx991cnx/%E5%86%85%E5%AD%98%E5%86%99%E5%85%A5/quickcpy_0xd820.bin) 处的文件在lfs变基时丢失

* [ ]  卡西欧991cnx的许多内置的未列出的字符的功能(比如81的(/@是平方和),可以单独列个表的说。不需要长的ropchain也能用说实在有些时候很方便的说,比如Intg(,可以直接算[x]的说

@Physics365

对于按键检测的话,可以去搜搜矩阵键盘扫描,rom也dump了,也有ghidra,可以看看源代码?

刷字符真的没必要,quickcpy/4d变量+字符表搞定

刷字符还是满有用的说,放在附录也许会比较好的说

地址只是采用了小端序表示而已,你只要点出是和字节自然书写顺序相反就行了 比如0x11223344只要点出其字节表示为: 44 33 22 11就行了

这个还是提一下比较好的说

没必要列出991cnx的未使用字符功能,使用这些未使用字符的功能也麻烦很多(CWII就更不要说了),也不会有多出Rom能力之外的功能(比如Gamma),并且根据Rom不同可能性质也不同 不过Intg(这样的应该是卡西欧程序员懒得删了,因为这种代码可能被程序的其他地方使用(比如Fix数位显示代码),删除了不会减少多少rom大小 像大Π这样的就彻底被移除了,不过还是可以用e sigma ln这样的方法来算,其实影响不大

这些其实有个别的(比如Intg,在算下取整的累加时很有用)还是满好用的说,弄一下还是有意义的也许,而且也可以补充一下字符表指出那些可以用lbf就能刷,这样对于比较新手的人来说也方便,而且能直接一点看到教程的学习的成效的说

题外话,楼主是最近在学日语ですか(desuka) "的说"这个口癖影响我理解语句了

呐,"的说"是我的个人口癖的说,如果要写教程的话不会带到教程里,但是平常回复的话也没办法的说

@fish4terrisa-MSDSM
Copy link
Collaborator

另外,建议移除无意义的乱码字符,这些乱码字符会影响CWII的学习,因为CWII采用了新的一二级转换表,没有之前的bug了 不过乱码字符的特性确实可以很方便的看出来字符的二进制表示... 另外试试将一二级字符表做成纯文字版,加上字体?(这个是可行的,一级字符显示前会被转换为二级字符) 此外,一级字符和二级字符,多字节双字节字符 控制字符之类的字符的命名问题应该需要探讨一下(毕竟这些其实是历史遗留),这些很容易误导新手理解

无意义的字符的话就指明无意义也许可以的说

我的建议是: 一级字符改为: 算术字符 二级字符改为: 显示字符 双字节字符改为: 双字节(算术)字符 控制字符改为: ROP函数(gadget)

这个可以讨论一下

主要是几个字符之间有重叠(比如rop与一二级字符),按分类的话会很难分的说,所以还是按十六进制编号顺序排列会比较好的说

@qiufuyu123
Copy link
Collaborator

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去
字符表就分1,2级字符就够了

@telecomadm1145
Copy link

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话

1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

@telecomadm1145
Copy link

没必要列出991cnx的未使用字符功能,使用这些未使用字符的功能也麻烦很多(CWII就更不要说了),也不会有多出Rom能力之外的功能(比如Gamma),并且根据Rom不同可能性质也不同 不过Intg(这样的应该是卡西欧程序员懒得删了,因为这种代码可能被程序的其他地方使用(比如Fix数位显示代码),删除了不会减少多少rom大小 像大Π这样的就彻底被移除了,不过还是可以用e sigma ln这样的方法来算,其实影响不大

这些其实有个别的(比如Intg,在算下取整的累加时很有用)还是满好用的说,弄一下还是有意义的也许,而且也可以补充一下字符表指出那些可以用lbf就能刷,这样对于比较新手的人来说也方便,而且能直接一点看到教程的学习的成效的说

@Physics365
我推测,异常字符的作用效果是可能随着机型甚至版本改变的(卡西欧也没必要保证异常字符能工作),这些和rom的函数和数据偏移和内容不同有关,甚至对于cwi,乱码也是会因为rom变化而改变的
不过,关于异常字符的特性的话可以考虑用ui自动化对着模拟器去刷?我自己之前就用模拟器+ui自动化刷了个字符表
毕竟字符用法也就那几种,ocr一下错误类型或者直接读取stacktrace和寄存器判断就行了

@fish4terrisa-MSDSM
Copy link
Collaborator

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话

1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

是否可以改成单字节/双字节字符表的说¿

@fish4terrisa-MSDSM
Copy link
Collaborator

fish4terrisa-MSDSM commented Apr 30, 2024

没必要列出991cnx的未使用字符功能,使用这些未使用字符的功能也麻烦很多(CWII就更不要说了),也不会有多出Rom能力之外的功能(比如Gamma),并且根据Rom不同可能性质也不同 不过Intg(这样的应该是卡西欧程序员懒得删了,因为这种代码可能被程序的其他地方使用(比如Fix数位显示代码),删除了不会减少多少rom大小 像大Π这样的就彻底被移除了,不过还是可以用e sigma ln这样的方法来算,其实影响不大

这些其实有个别的(比如Intg,在算下取整的累加时很有用)还是满好用的说,弄一下还是有意义的也许,而且也可以补充一下字符表指出那些可以用lbf就能刷,这样对于比较新手的人来说也方便,而且能直接一点看到教程的学习的成效的说

@Physics365 我推测,异常字符的作用效果是可能随着机型甚至版本改变的(卡西欧也没必要保证异常字符能工作),这些和rom的函数和数据偏移和内容不同有关,甚至对于cwi,乱码也是会因为rom变化而改变的 不过,关于异常字符的特性的话可以考虑用ui自动化对着模拟器去刷?我自己之前就用模拟器+ui自动化刷了个字符表 毕竟字符用法也就那几种,ocr一下错误类型或者直接读取stacktrace和寄存器判断就行了

至少Intg等等在991cnx的verc和verf里都能用,所以仅对于cnx来讲还是能用的,而且最主要是对于很多新手来说,如果没办法有非常显著而且易得的成果就会有点吸引力缺失,而这些字符个别也的确很有用。其实更重要的是指出哪些单字节字符可以直接用lbf去刷,这个能省不少事而且还满常用的

如果能自动判断的话就更方便了的说

@telecomadm1145
Copy link

telecomadm1145 commented Apr 30, 2024

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话
1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

是否可以改成单字节/双字节字符表的说¿

@fish4terrisa-MSDSM

你这就是没有怎么分清单字节双字节 一级二级了

单字节双字节和内容有关的,大部分函数都会对其进行处理,是字符本身的特性

一级二级则是因为被不同的函数解释而导致的,在编辑公式的时候,就是一级字符,显示到屏幕上面的,就是二级字符,这是和被什么函数使用相关的

@fish4terrisa-MSDSM
Copy link
Collaborator

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话
1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

是否可以改成单字节/双字节字符表的说¿

@fish4terrisa-MSDSM

你这就是没有怎么分清单字节双字节 一级二级了

单字节双字节和内容有关的,大部分函数都会对其进行处理,是字符本身的特性

一级二级则是因为被不同的函数解释而导致的,在编辑公式的时候,就是一级字符,显示到屏幕上面的,就是二级字符,这是和被什么函数使用相关的

哦哦,这个啊,那是我弄错了,那么原来的一级字符表就叫单字节字符表,然后二级作为映射或者拼字字符表行不行的说?

@telecomadm1145
Copy link

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话
1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

是否可以改成单字节/双字节字符表的说¿

@fish4terrisa-MSDSM
你这就是没有怎么分清单字节双字节 一级二级了
单字节双字节和内容有关的,大部分函数都会对其进行处理,是字符本身的特性
一级二级则是因为被不同的函数解释而导致的,在编辑公式的时候,就是一级字符,显示到屏幕上面的,就是二级字符,这是和被什么函数使用相关的

哦哦,这个啊,那是我弄错了,那么原来的一级字符表就叫单字节字符表,然后二级作为映射或者拼字字符表行不行的说?

不是这样的,公式中的字符也有双字节的,两者是互不干扰的

比如单位转换就都是FE开头的双字节字符,但是它不属于二级字符,而是一级字符

@telecomadm1145
Copy link

telecomadm1145 commented May 1, 2024

@Physics365
教程内容不考虑在内存区域添加SFR的内容吗?

data段0xf000往上就是sfr区域了,包含屏幕帧缓冲区,对比度,屏幕控制,待机,定时器等特殊功能的控制

btw: sfr==special function register 特殊功能寄存器

@Physics365
Copy link
Owner Author

同意

@fish4terrisa-MSDSM
Copy link
Collaborator

fish4terrisa-MSDSM commented May 1, 2024

不建议把控制字符放在字符表里,因为控制字符的本质是函数地址,应该归到rop一类里去 字符表就分1,2级字符就够了

不,我没提控制字符是字符,我的意思是,1,2级字符的说法有迷惑性,应该考虑改名,如果是针对新手的话
1,2级字符是早期研究拼字遗留的,这个命名在通常语境下不具有任何意义

是否可以改成单字节/双字节字符表的说¿

@fish4terrisa-MSDSM
你这就是没有怎么分清单字节双字节 一级二级了
单字节双字节和内容有关的,大部分函数都会对其进行处理,是字符本身的特性
一级二级则是因为被不同的函数解释而导致的,在编辑公式的时候,就是一级字符,显示到屏幕上面的,就是二级字符,这是和被什么函数使用相关的

哦哦,这个啊,那是我弄错了,那么原来的一级字符表就叫单字节字符表,然后二级作为映射或者拼字字符表行不行的说?

不是这样的,公式中的字符也有双字节的,两者是互不干扰的

比如单位转换就都是FE开头的双字节字符,但是它不属于二级字符,而是一级字符

的确双字节字符是一级字符,但二级字符(也就是拼字的时候显示时字节对应的字符)表里应该都是单字节对应一个字符的吧,我的意思是:

原一级字符表 => 
             单字节字符表
             双字节字符表(FAXX,FBXX...)
原二级字符表 =>
             映射(拼字)字符表

这样行不行

@Wenti-D
Copy link
Collaborator

Wenti-D commented May 1, 2024

但二级字符(也就是拼字的时候显示时字节对应的字符)表里应该都是单字节对应一个字符的吧

NO

image

@fish4terrisa-MSDSM
Copy link
Collaborator

但二级字符(也就是拼字的时候显示时字节对应的字符)表里应该都是单字节对应一个字符的吧

NO

image

emmm...那就分成

原一级字符表 => 
             单字节字符表
             双字节字符表(FAXX,FBXX...)
原二级字符表 =>
             映射(拼字)字符表
             映射(拼字)汉字字符表

如何

@Physics365
Copy link
Owner Author

可以

@telecomadm1145
Copy link

但二级字符(也就是拼字的时候显示时字节对应的字符)表里应该都是单字节对应一个字符的吧

NO
image

emmm...那就分成

原一级字符表 => 
             单字节字符表
             双字节字符表(FAXX,FBXX...)
原二级字符表 =>
             映射(拼字)字符表
             映射(拼字)汉字字符表

如何

@fish4terrisa-MSDSM

在非中文机型上,双字节的二级字符不一定是中文,中文和日语共用字节开头(0xF1 0xF2),0xF3 0xF4都是其他语言机型的字节开头,还有0xF0里面在Cwii中存储了一些符号,这些也不属于汉字

由于拼字字符不需要用到双字节字符的特性(因为也没办法编辑)

所以我建议:

将二级字符统一改为映射(拼字)字符

特别标注其为双字节是无意义的

@fish4terrisa-MSDSM
Copy link
Collaborator

但二级字符(也就是拼字的时候显示时字节对应的字符)表里应该都是单字节对应一个字符的吧

NO
image

emmm...那就分成

原一级字符表 => 
             单字节字符表
             双字节字符表(FAXX,FBXX...)
原二级字符表 =>
             映射(拼字)字符表
             映射(拼字)汉字字符表

如何

@fish4terrisa-MSDSM

在非中文机型上,双字节的二级字符不一定是中文,中文和日语共用字节开头(0xF1 0xF2),0xF3 0xF4都是其他语言机型的字节开头,还有0xF0里面在Cwii中存储了一些符号,这些也不属于汉字

由于拼字字符不需要用到双字节字符的特性(因为也没办法编辑)

所以我建议:

将二级字符统一改为映射(拼字)字符

特别标注其为双字节是无意义的

好的

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
先可以看看 | Good First Issue 给新来的朋友们看看 需要协助 | Help Wanted 可能需要来自其他人的更多帮助来解决
Projects
None yet
Development

No branches or pull requests

6 participants