未验证,请8u们挑错
在qiufuyu123中,循环中复制使用的是strcpy,但在现在的大多数程序中,都含有00,不能使用strcpy,我们一般使用的是memcpy,但memcpy的使用方法不像strcpy那么简单,因为memcpy会使用内存当长度,逐次递减,当复制到那段内存后,就会污染长度,使得复制长度稍长,所以,@贴吧用户_QQR3MM4 发明了一种memcpy循环方法,也就是下面的Xyzst循环
Xyzst循环使用的地址主要是1:87CC和0:90F4(VerF)
下列以FuncEditor的一个循环为例
首先
DB6E:A2 9A 00 00 AC DB 2E 90 00 00 01 00
ER8=ACDB ER2=0100
DB7A: 94 8F 00 00
将DBAC处改为01
注意DBAC处就是CC 87 XX XX中的XX
此处是为了可以正常调用1:87CC
然后
DB9E:E2 30 01 00 42 05 E0 E9 30 D7 5A D7
赋值QR0
DBAA:CC 87 01 00 00 00
memcpy(er2,er4,er0),pop er4
将E9E0到EF22的内存复制到D730到DC72的内存,但实际上只复制到了DC52,后面的8F10地址表没复制,因为当复制到DBAC时memcpy会把其复制成A6,而memcpy又把此处用作剩余字节数,所以此时memcpy只会再复制A6个字节,只能到DC52
这也解释了为什么原程序后面不用CC 87 01 00 00 00,因为如果如此,memcpy就会在此处截断
上面就是Xyzst循环的主要步骤
(我写这个的原因是看有些人看不懂CC 87 XX XX和F4 90 XX XX)
在qiufuyu123中,循环中复制使用的是strcpy,但在现在的大多数程序中,都含有00,不能使用strcpy,我们一般使用的是memcpy,但memcpy的使用方法不像strcpy那么简单,因为memcpy会使用内存当长度,逐次递减,当复制到那段内存后,就会污染长度,使得复制长度稍长,所以,@贴吧用户_QQR3MM4 发明了一种memcpy循环方法,也就是下面的Xyzst循环
Xyzst循环使用的地址主要是1:87CC和0:90F4(VerF)
下列以FuncEditor的一个循环为例
首先
DB6E:A2 9A 00 00 AC DB 2E 90 00 00 01 00
ER8=ACDB ER2=0100
DB7A: 94 8F 00 00
将DBAC处改为01
注意DBAC处就是CC 87 XX XX中的XX
此处是为了可以正常调用1:87CC
然后
DB9E:E2 30 01 00 42 05 E0 E9 30 D7 5A D7
赋值QR0
DBAA:CC 87 01 00 00 00
memcpy(er2,er4,er0),pop er4
将E9E0到EF22的内存复制到D730到DC72的内存,但实际上只复制到了DC52,后面的8F10地址表没复制,因为当复制到DBAC时memcpy会把其复制成A6,而memcpy又把此处用作剩余字节数,所以此时memcpy只会再复制A6个字节,只能到DC52
这也解释了为什么原程序后面不用CC 87 01 00 00 00,因为如果如此,memcpy就会在此处截断
上面就是Xyzst循环的主要步骤
(我写这个的原因是看有些人看不懂CC 87 XX XX和F4 90 XX XX)
