写屏函数:
" L5 t$ O. C# K! y1 R02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
5 B0 S4 p# v- X9 m0 s02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码+ ~8 l& R; Q7 A7 G) B
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
0 p" O1 \; M l- V! C1 L( ~02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
2 K. F6 e* H7 Y. q. J9 Q. S$ F( z& T02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
1 p% N( }* p$ e4 @% g0 p02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表
6 v. x# X8 b4 J- o每个字符码表占24(16进制)个字节* m+ n. a1 E3 g2 a! Y
02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
5 j: ^- ?5 n/ O6 W. r& {02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址, Z- t+ `2 e7 I4 j
02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
2 W" t: h8 V* F+ p( a; ~02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一) b+ r1 G7 J- [/ b
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30] ]2 @. e8 o, N2 a* o+ }3 x4 n6 f
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
# W$ q3 f2 z/ t+ \02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
) b! h6 A/ K" |每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
& p( P( V2 t0 v. V02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]
# y+ \. }% o" m2 m' }* B02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
/ _; q1 o, ]7 T ~6 I0 m02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
6 j. x' y( E* x( g1 X/ `02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
) p2 L- C( M' l( B; [: y02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
1 T! Z9 w' f& ]+ s+ P @4 d4 x02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]% z( h1 W7 t( r1 \
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
# u6 b* l+ b& V w; G# H" I02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
( K: c7 D; [* Y) P# x5 U02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
) U& x4 k8 }: v8 b7 Y3 R4 W8 i( S02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
, ^( @6 v3 Z- \) ^1 |' _02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
+ k; ~. h; b! y( L- i7 e02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]8 k0 l( s2 A7 s) Q: R# G
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]! x7 A) @+ m9 Z" N2 V4 K
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]) e5 }* G' M3 e
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]; b" T' ~- H) d8 F! _$ z, u( a
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi] X1 R6 h) ]4 U. R0 K. J9 c9 x
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30] X5 b% U% l* [, k
02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]
8 F% Y) e+ ]1 w6 C! R7 J2 X: f02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
- D, w' F' [% P8 ~3 E02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]
/ @# D# ]6 k9 Y- I7 l) [3 p& f, B02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
7 x5 e- u) Z& k, r4 a) I" C02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]1 g2 M) c" E5 f2 Y e8 U3 N
02A0EAC0 |. |83C1 70 ||add ecx,70
3 x- ~- I8 g$ O S0 G' J- `2 ?' R02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
H( L7 \* q& J+ `* v& U$ ]4 }02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]: S' q; @# [. Q, U
02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
9 N4 q' F8 Q7 C! x/ a; n% `02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]1 `* P6 r* S& L6 o
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]0 Y7 D& P8 Q$ n. m& P: V( D
02A0EAD2 |. |03C3 ||add eax,ebx
6 d6 x2 m' ^8 d$ j G02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]& r. ~) f I* r) C& M; ]1 h
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
% g( H9 l v1 X2 u+ ~/ i4 n0 k. n4 n
本游戏字符编码采用UNICODE,
/ t3 ~6 a. Y' w/ c2 ?对字符码表的操作:/ @/ q' }6 Y: [2 |
10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
. R5 }0 \6 q! s5 I1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]
1 d% S5 t6 j. g/ R4 i1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址/ I5 D+ T0 g- M8 b
10028810 |. |33C9 |xor ecx,ecx+ }* L( H; [4 u- M, e
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]
8 Z Y# D' P4 C5 s10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]3 |2 `+ _& l! j, s" @8 K
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
0 F9 L$ Y- z6 F8 q1002881D |. |D9C0 |fld st
( ~ P7 C2 w1 p* G! Z3 C1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
8 {) Q, J8 N* `6 Z10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
9 {* X2 m! G5 ~. @10028826 |. |D9C0 |fld st1 V7 N! Y% v! m8 r Q. R
10028828 |. |DEC2 |faddp st(2),st \3 [" I9 m! o$ ]6 b7 \1 i
1002882A |. |D9C9 |fxch st(1)* R4 E4 Z5 v8 q' Q+ f% u
1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
3 s- [% ^: ~' R6 U+ f4 Y10028830 |. |D8D3 |fcom st(3), y2 Q2 M7 F b0 z
10028832 |. |DFE0 |fstsw ax* y- j# d1 ?1 |8 R
10028834 |. |F6C4 01 |test ah,1" G# y& j8 Z' R* {; H
10028837 |. |74 2B |je short xcEngine.10028864
5 B# N. i. U, v" H; e10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]( T/ H; P! f Q: N2 o$ T7 s
1002883D |. |D8D3 |fcom st(3)
& g$ k! \+ y0 }1002883F |. |DFE0 |fstsw ax
+ @6 J% L9 L" Q8 f9 G) L/ c10028841 |. |F6C4 41 |test ah,41
/ ?. d9 `! }7 M$ g7 U1 H) i10028844 |. |7A 04 |jpe short xcEngine.1002884A) U. Y$ I( K9 c- C# _
10028846 |. |DDD8 |fstp st
' K; f' @1 U9 J% G/ O/ @! w10028848 |. |EB 1A |jmp short xcEngine.10028864( f8 @/ S7 v+ Z d7 s5 n# Y
1002884A |> |D9C9 |fxch st(1)
[4 l0 O( }3 F4 V5 S1002884C |. |D8D3 |fcom st(3)
- H, i: H. w3 g5 f. S1 H$ @* T1002884E |. |DFE0 |fstsw ax( e: R3 ^% v: c2 n9 S) Z7 n
10028850 |. |F6C4 05 |test ah,53 \5 Q& G4 o! z6 r' k& V, x
10028853 |. |7A 04 |jpe short xcEngine.10028859 @% J3 J0 O7 U+ ~
10028855 |. |DDD9 |fstp st(1)
% y/ S9 i! @3 K( z, y4 p+ D10028857 |. |EB 0B |jmp short xcEngine.10028864
- ?% i2 \1 l; q, B10028859 |> |D9C9 |fxch st(1)
! H V( k; B* i4 D( K+ Y1002885B |. |D8DC |fcomp st(4)
- w$ f5 k; b7 a, O1002885D |. |DFE0 |fstsw ax# [( G# C; B: d6 r1 _! @
1002885F |. |F6C4 41 |test ah,416 ]1 W; P6 E# N8 ~; ^% w' Q
10028862 |. |75 05 |jnz short xcEngine.10028869
& ]* Z5 _- k5 o) ?' x1 B% \; d5 U10028864 |> |B9 01000000 |mov ecx,1- U4 l' I" |' a& l6 q$ Z5 N0 f
10028869 |> |85C9 |test ecx,ecx
4 V9 I' e& F' K3 O' j1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]# ^* o& e" D9 M$ J+ c
1002886F |. |D940 14 |fld dword ptr ds:[eax+14]! \9 N* F2 @' u7 n8 d
10028872 |. |DECA |fmulp st(2),st
/ E. ]( |: x g( t10028874 |. |DEC1 |faddp st(1),st
" h: ~0 ~% I i* J& t! e10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]
; e. d4 b8 r4 x8 {" ~1002887A |. |75 05 |jnz short xcEngine.10028881
+ D) v; `) J: y9 P% u$ M1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1! ^6 j) T% D8 `3 A! N
10028881 |> |83C2 02 |add edx,2' o: G8 r: K b* c8 A% j0 B
10028884 |. |83EF 01 |sub edi,1) l/ M- F1 I. Q6 S; F
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288073 }, A6 [- u+ ]* O2 J3 L$ w
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |