网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月23日漏签0天
fx-es(ms)吧 关注:17,650贴子:314,701
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 5回复贴,共1页
<<返回fx-es(ms)吧
>0< 加载中...

991cnx quickword & 13CC4复制与7字节launcher

  • 只看楼主
  • 收藏

  • 回复
  • RH_QDG
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
基数模式输入的文本编辑(显示)器,适用于991cnx VerC.
将如下主程序注入到E9E0处:
60 D8 02 EA 48 B9 32 30 40 7B 31 30 10 93 30 30 34 61 31 30 00 02 10 D1 68 6C 31 30 24 D8 26 92 31 30 22 EA C4 3C 31 30 71 00 32 80 32 32 96 EA 80 D1 0E 95 32 30 BC 73 01 EA 30 30 F7 D7 48 B9 32 30 00 7F 30 30 34 61 31 30 01 30 B0 EA AE 21 32 30 40 26 31 30 11 30 AE 21 32 30 40 26 31 30 21 30 AE 21 32 30 40 26 31 30 31 30 AE 21 32 30 06 87 30 30 34 61 31 30 20 0E 32 D1 48 B9 32 30 68 6C 31 30 A6 E9 32 F2 31 30 26 92 31 30 FC D7 02 00
随后在正常模式下输入启动程序:
FD 24 DC E9 34 2D 31
按等号,此时屏幕清空,进入基数模式(此时可以调整为小字体输入)。输入68个拼字字符的十六进制编码(4行拼字,每行17个),然后按[菜单][3],显示四行普通字体的拼字。此时按shift输入可重新进入基数模式拼字,不按按键10分钟自动关机,拼字内容存在EAB0处,开机和初始化均保留。
注意:
1.支持拼字双字节字符,但是受输入模式最高199个字节的限制,68个拼字字符最多只能包含31个双字节字符
2.空格(空白)请用20填充,不要输入00,否则拼字会被截停


  • RH_QDG
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
主程序仅长146字节,launcher更是压缩到仅7个字节。事实上,此程序使用了两个新技术:13CC4复制和7字节launcher.这两项技术早在去年就已经被我研究出来了,本来想在像素编辑器2.0里发布的,但是如你所见,像素编辑器2.0我到现在还没改完bug所以就在这里讲了


2025-11-23 15:22:24
广告
不感兴趣
开通SVIP免广告
  • RH_QDG
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
13CC4是一个好用的memcpy地址:

其中22DC4是memcpy函数,将ER2处的[SP]个字节复制到ER0处。可以看到,memcpy需要的参数ER0和ER2从ER14(即FP)处读取,然后跳转至ER14处并POPXR4和QR8,也就是说我们只需要提供ER14和复制长度就可以完成复制和跳转,ER0和ER2的取值只需要埋在主程序随便一个空闲区域即可。调用时,ER0和ER2应分别位于[ER14-0x6]处和[ER14-0xA]处


  • RH_QDG
  • TI-84+
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
13CC4复制和7字节launcher其实算是一个组合,它是此程序的循环系统。7个字节的启动程序意味着我们只能赋值一次ER14和运行一条指令,我们可以用它来跳转到E9E0处的主程序,SP在E9E0处主程序中运行时,需要在避免PUSH指令污染的条件下完成对主程序的复制,然后运行程序副本即可
以此程序为例,我把ER14赋值为E9DC,然后用12D34跳转到E9DC并POP QR8,此时ER12和ER14分别被赋值为D860和EA02.
这里的ER12值是经过特殊计算的(后面会讲),ER14则是指向一个长8字节的memcpy模块:
22 EA C4 3C 31 30 71 00
然后调用17B40:将这个memcpy模块复制到ER12(D860)处,因为不能在主程序中使用memcpy。后面:
10 93 30 30 //开屏幕
34 61 31 30 00 02 10 D1 68 6C 31 30 24 D8 //将D111写为02进入基数模式,同时ER4设为D824准备跳转
26 92 31 30 //跳转至D862处的memcpy模块执行13CC4复制主程序,同时将模块前两个字节EA22赋值给ER14,这个位置指向主程序中的ER0和ER2,为memcpy提供参数
C4 3C 31 30 71 00 //13CC4取得ER0和ER2的值并完成主程序的复制,0071是复制长度。
前面说过,ER12的值,即memcpy模块的位置是经过特殊计算的,复制时程序副本的最后4个字节FCD7 02 00会恰好覆盖到模块中原来的后4个字节,其后两个字节将复制长度覆写为0002截停复制,复制结束,memcpy函数返回
memcpy函数22DC4在开始时会PUSH ER14,结束时又会POP ER14,这期间复制过程中,如果原本PUSH的ER14被它自己覆写了,结束时ER14就会POP到这个覆写的值。这里就是利用了这个原理,程序副本的最后4个字节的前两个字节FC D7覆写了原来PUSH的ER14,复制结束时ER14就被POP成了D7FC,然后13CD0跳转至D808,开始运行程序副本。
循环时直接跳回E9DC即可。
以上方案的缺陷是如09310这类只需要在程序开始时运行一次的代码变成了在每次循环都被运行一次,解决方法是在程序结尾加上一段单独运行它的代码,然后再跳回开头,比如对于此程序就可在结尾加上这一段:
DC E9 48 B9 32 30 10 93 30 30 34 2D 31 30
此方法只适用没有PUSH的代码,如果有PUSH又会是另一种解法,这里就不写了,有需求再问我吧


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回fx-es(ms)吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示