写屏函数:
4 Z1 r5 E) X5 `( Z3 s02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax], N) o, {6 W! p+ X/ r/ |: O
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码2 j4 s/ A. A9 G# U" K" s4 e, O
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]' V3 V9 n. R, |- E
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
2 Y7 n4 [& K3 K8 _02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
5 ]- b9 j, r! e' z) [% I02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表. l$ i, q2 `* |8 B6 j4 h
每个字符码表占24(16进制)个字节9 \! d- A: c$ A: L5 `2 f7 G4 T8 Y
02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]# O) \) M" o+ v& ?: u; K' k
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
0 p. v. b8 ^7 A0 I/ }02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]/ f: p" ^2 @: }# e* ]
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一' U0 B; N8 w6 Y4 C5 Q& O
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]9 c6 o& o4 W8 n6 ^9 c3 f: ]( B* |/ A8 S
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]& Z! q7 J x; [, r0 M
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
' Y- \9 H. n1 _2 k每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
2 A7 G `0 \; m9 z02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]
* c2 i& r0 ^% z5 c# w" i& N02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
: S5 C! D- _* V- ]02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
8 W `6 b4 [/ z# p5 v' ^3 L4 Q: r, Q02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]- I6 c- t, n* D; ~( H
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
- b% h& f8 u5 V- u2 v2 {02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
6 X0 L8 }1 M0 k1 A# n02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
( }8 V2 Y$ Y* c02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
R" {! G' I( S; q* ^* V& O02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
7 x+ ^8 q5 Y* v T* L02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]6 T! t* `- `. \' j8 ]: S
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
9 M( y- V! L: h" ^4 o02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
- U+ o! `+ v; M2 w- S5 i02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]) v* l' d2 N5 v! e
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
2 [+ D% [5 B. o# y9 R02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]8 E; Q8 d% M7 I7 l. ~+ R
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]/ L8 [ L: M' p; D( Z0 |
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
) l8 z8 U7 I% A* f1 i1 d02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]( V& }0 O6 A1 Q# t8 _8 B! G: ?
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]# x4 r6 w1 c3 w# F" d; S
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]
# h" Y8 }$ m/ w2 i02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
+ @ {) \4 L l8 v* C; i, d7 @% i02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30], ^- U' W4 \' g/ I) ~% V, ?
02A0EAC0 |. |83C1 70 ||add ecx,70
+ @3 O, V9 t% M6 D$ {02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]* |6 _+ V9 ?% ^. I s
02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
' I5 Q9 D8 ?8 p6 ]2 Z02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
1 d" R0 C4 e. }02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]5 e8 `, W+ v/ S! ?( |
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]$ x( i; i/ t1 w/ |% Y+ H
02A0EAD2 |. |03C3 ||add eax,ebx
T2 F& H! ?; A: B02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
' F, ~5 i) d, ^- c! _02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C! y g1 @8 }( X: ?0 j
/ g2 M' X8 _9 A% ^' h1 O本游戏字符编码采用UNICODE,
' A% |! _" W0 V8 r2 _6 K对字符码表的操作:
6 ^; s! Z9 @$ x6 q10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
1 u1 C) ]. @) o2 g' s; s1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]3 P& ^" @9 T- X7 i; [. j) I
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
; m2 |9 q- W7 x, ?1 ]4 C10028810 |. |33C9 |xor ecx,ecx# D% [4 K+ l# o
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]* C5 Q6 x' b' S/ P: W% l
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]
' R: u) O k7 C" }6 [! q8 P: ?, @10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
Q* l, g( e5 Z1 ^2 O6 q1002881D |. |D9C0 |fld st( r2 w% y6 v) o- u# m* B! w3 h
1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
) b2 `) ` H* ?" }% ?/ M* n10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
$ P' i1 B) X5 B% e- o" u6 `10028826 |. |D9C0 |fld st
% [3 s8 g% O7 L5 U10028828 |. |DEC2 |faddp st(2),st! y( W# o1 w- R! L8 m6 u
1002882A |. |D9C9 |fxch st(1)
9 l1 L9 f. k- m I: `1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
8 X$ Q& L A2 I% A9 P* ~9 X10028830 |. |D8D3 |fcom st(3)
$ H5 N! f. d8 F& I& m: a5 a8 X! R10028832 |. |DFE0 |fstsw ax
, X0 K4 J/ C& G8 W% u0 N4 c% ] l10028834 |. |F6C4 01 |test ah,1
, ]% ] ]/ l; h1 J) F0 a1 `10028837 |. |74 2B |je short xcEngine.100288649 B$ Y+ l$ j: {$ A' m
10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]* r$ G q) L, n
1002883D |. |D8D3 |fcom st(3)( w4 Y3 G3 g3 O/ n& M$ F, q, g
1002883F |. |DFE0 |fstsw ax; B8 P& t0 n6 C3 _
10028841 |. |F6C4 41 |test ah,41$ S0 j5 ?6 O/ O
10028844 |. |7A 04 |jpe short xcEngine.1002884A0 v; \2 I/ s; }1 L* M# R
10028846 |. |DDD8 |fstp st' g) O2 n* b" x( e: q* z6 K
10028848 |. |EB 1A |jmp short xcEngine.10028864
5 i4 ~; D. _( ~8 {/ |1002884A |> |D9C9 |fxch st(1)' |) }8 [( V2 k* O# d9 ^! C; V
1002884C |. |D8D3 |fcom st(3)& r! @* L# ` e/ \3 E
1002884E |. |DFE0 |fstsw ax! z6 F; J; @6 Z) g+ Z. N$ Z. s# J
10028850 |. |F6C4 05 |test ah,5
( m% U" N( j2 U: q7 W7 Z7 V1 t10028853 |. |7A 04 |jpe short xcEngine.10028859. C0 F$ U3 h* z1 q
10028855 |. |DDD9 |fstp st(1)9 S8 I; Z! ~( x# [0 P' l) z' X+ t4 w0 ]& Y
10028857 |. |EB 0B |jmp short xcEngine.10028864
& X$ @9 @! |8 p+ }+ w+ |0 L6 [10028859 |> |D9C9 |fxch st(1)6 X" \7 @& O. \( f6 Z$ h! |( e$ q
1002885B |. |D8DC |fcomp st(4)
8 l* \' d8 [" b3 m2 V/ X3 u7 ]1002885D |. |DFE0 |fstsw ax6 J- P/ V* ?7 z, r& { t
1002885F |. |F6C4 41 |test ah,411 A- _1 i) @" o) f% C
10028862 |. |75 05 |jnz short xcEngine.10028869
7 n: ?% s# ^1 \1 G# k0 _/ j10028864 |> |B9 01000000 |mov ecx,1
5 {& z: m% |9 \4 c' a10028869 |> |85C9 |test ecx,ecx/ h7 ]* n) s4 x/ ~% o' ^& k
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
% U. G4 N8 l. c/ @1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
8 W) }/ i5 C% Y: l/ Y5 V/ E6 k10028872 |. |DECA |fmulp st(2),st
+ D) F8 `' C9 J7 @+ a1 y/ {10028874 |. |DEC1 |faddp st(1),st
2 f% | V& A0 Z7 C. E10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]6 E# H" U% Z! X9 m8 y, A! Y
1002887A |. |75 05 |jnz short xcEngine.10028881' D0 g6 O! T- V) k; q. a1 ~9 P
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1" u% {9 ^1 [" y2 T- z
10028881 |> |83C2 02 |add edx,2
" f- H7 f; E# |, Q. z3 | a- Y10028884 |. |83EF 01 |sub edi,18 u, O) I: ~5 x- i6 o; {$ i
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807# h: Z- l" N* ~# W4 Y
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |