6.1版改法(红色部分为我另外改的,可省部分操作)
========================
看不明白的请找其他看得明白的人解释。
========================
步骤一不变
步骤二在4072F2
步骤三只需要在步骤一写入新的SABC字符即可,不用再找一段N×4字节的空间。
本例子是将SABC字符改写在从472DE3开始的位置。
这里472DE3指向的是最低档的字符,但是在代码中要改成最低档字符的位置减2。
另外函数406CC9在406CAA。
步骤四需修改下面代码
0047819C |. BA E12D4700 MOV EDX,00472DE1 <===注意步骤三的说明
004781A5 |. 52 PUSH EDX
004781A6 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
004781A9 |. 52 PUSH EDX
004781AA |. E8 3149F9FF CALL 0040CAE0 <===注意这里要另外找空白位置写新函数,这里提供的位置仅供参考
004781AF |. 52 PUSH EDX
004781B0 |. 51 PUSH ECX
004781B1 |. 90 NOP
004781B2 |. 90 NOP
004781B3 |. 90 NOP
004781B4 |. 90 NOP
004781B5 |. 90 NOP
004781B6 |. 90 NOP
004781B7 |. 90 NOP
004781B8 |. 90 NOP
004781B9 |. 90 NOP
004781BA |. 90 NOP
004781BB |. 90 NOP
004781BC |. 90 NOP
004781BD |. 90 NOP
004781BE |. 90 NOP
004781BF |. 90 NOP
004781C0 |. 90 NOP
004781D4 |> 8D0442 LEA EAX,DWORD PTR DS:[EDX+EAX*2]
0040CAE0 /$ 55 PUSH EBP
0040CAE1 |. 8BEC MOV EBP,ESP
0040CAE3 |. 51 PUSH ECX
0040CAE4 |. 50 PUSH EAX
0040CAE5 |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C]
0040CAE8 |. 8D0442 LEA EAX,DWORD PTR DS:[EDX+EAX*2]
0040CAEB |. 50 PUSH EAX
0040CAEC |. 8D0C4A LEA ECX,DWORD PTR DS:[EDX+ECX*2]
0040CAEF |. 51 PUSH ECX
0040CAF0 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
0040CAF3 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0040CAF6 |. 3AC1 CMP AL,CL
0040CAF8 |. 77 0D JA SHORT 0040CB07
0040CAFA |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0040CAFD |. C602 2B MOV BYTE PTR DS:[EDX],2B
0040CB00 |. B8 A7035000 MOV EAX,005003A7
0040CB05 |. EB 0B JMP SHORT 0040CB12
0040CB07 |> 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
0040CB0A |. C602 3B MOV BYTE PTR DS:[EDX],3B
0040CB0D |. B8 A0035000 MOV EAX,005003A0
0040CB12 |> 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
0040CB15 |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0040CB18 |. 8BE5 MOV ESP,EBP
0040CB1A |. 5D POP EBP
0040CB1B \. C2 0800 RETN 8
完毕。
追加补充:STAR原来的代码和此改法均仅对应单字节的字符,如果要设置成双字节的字符(例如A+),一般不建议(因为实际的显示效果会不够长,需要自己另外调整界面格局),实在要改就要将上面的代码中所有*2的进行代码调整(不能简单地改成*3)。
[ 本帖最后由 godtype 于 2016-5-14 23:01 编辑 ]
|