十一、如何利用变量值辅助拼字(魔数法)
这里就举楼主自己的例子吧:《【991+】【新手向】一步步教你打 I love you》的9L中使用了这两个变量:
M=1.4920313076652×10^79
Ans=1.7521202020202×10^-69
下面来转换成内部的存储结构:
M 为 01 49 20 31 30 76 65 20 79 01
Ans 为 01 75 21 20 20 20 20 20 31 00
转换成字符串为:"\x01I 10ve y\x01\x01u! 1"
也就是说我们利用这两个数值产生了13个目标字符。这13个目标字符中有10个字符是键盘上没有对应按键的字符。
也就是说使用辅助变量值可以减少刷不稳定字符的数量。
那么一共有 M Ans A B C D E F X Y 十个变量,每一个变量都可以辅助拼字。总共可用字节有 80 字节,完全可以满足四行拼字的 64 字节的需要。
其实在基本溢出模式下是无法访问到 D 后面的变量区域的(最多只能到达偏移量 +0xFF 的地方),但是可以通过删除来使后面的内容移动到前面。但是字符串复制是遇到 0x00 就会停止,所以要保证存储的每一个变量大于等于 1 或小于 0,并且填满所有有效数字。
但是魔数法也有弊端,那就是只能表示 99 个字符,涵盖 34 个大小写字母,10 个阿拉伯数字,空格(0x20)、感叹号(0x21)这两个常用标点。所以魔数法只能够起到辅助作用,不能代替刷不稳定字符。
这里就举楼主自己的例子吧:《【991+】【新手向】一步步教你打 I love you》的9L中使用了这两个变量:
M=1.4920313076652×10^79
Ans=1.7521202020202×10^-69
下面来转换成内部的存储结构:
M 为 01 49 20 31 30 76 65 20 79 01
Ans 为 01 75 21 20 20 20 20 20 31 00
转换成字符串为:"\x01I 10ve y\x01\x01u! 1"
也就是说我们利用这两个数值产生了13个目标字符。这13个目标字符中有10个字符是键盘上没有对应按键的字符。
也就是说使用辅助变量值可以减少刷不稳定字符的数量。
那么一共有 M Ans A B C D E F X Y 十个变量,每一个变量都可以辅助拼字。总共可用字节有 80 字节,完全可以满足四行拼字的 64 字节的需要。
其实在基本溢出模式下是无法访问到 D 后面的变量区域的(最多只能到达偏移量 +0xFF 的地方),但是可以通过删除来使后面的内容移动到前面。但是字符串复制是遇到 0x00 就会停止,所以要保证存储的每一个变量大于等于 1 或小于 0,并且填满所有有效数字。
但是魔数法也有弊端,那就是只能表示 99 个字符,涵盖 34 个大小写字母,10 个阿拉伯数字,空格(0x20)、感叹号(0x21)这两个常用标点。所以魔数法只能够起到辅助作用,不能代替刷不稳定字符。