写屏函数:% ]) d! H! \, J7 T
02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
& y" u0 o+ E4 C$ C02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码9 Y' ?; f' j% i9 M2 T; |* O
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]- X) k" z* }) f) b- G6 l
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]" k/ ?" | S. L5 k2 n, k
02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]' M; F) a, f2 j6 M
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表2 a8 Y) \% s; }! |& K8 P9 [
每个字符码表占24(16进制)个字节
# w. n6 l# @, I1 I02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
; J1 p2 m( D5 P+ K7 a+ y) F02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址 L) }0 T1 F9 @
02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
# K- _& {7 v- E2 X q) t02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一/ l$ y, w- j9 H( U
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]6 h/ j8 D+ e6 }" i) _+ O; ], [
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]+ {* \+ i* i7 ]+ C7 ~+ w
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
3 j3 J' d, e" j( k V1 o每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
8 N8 |, I$ {# h, R02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]) j h& K, |* v: L8 b6 F
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
}5 Z' D" o* L02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]( c% h1 r$ _1 u. v4 ~
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
2 D' k: B2 y% \7 e( k1 J; `02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
" K, E8 N( m+ i- y, P% B0 W- ?* G02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]* `. ~! c5 G% w6 i; `* {2 X* ~" p
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]- W0 P. D$ J- I# _' ]5 T
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]! V$ ^/ _- m3 |7 ^
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
+ ~; n; F, k/ |- I, ^1 a. f6 z02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
) _ e; [- X5 F02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
$ S- Y$ {0 Z7 v5 B E2 I02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
5 l9 h% t% A- X& H* U02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]" @$ u. s0 c% z9 k5 @
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]( i8 }- u* b6 p- E
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]
7 u: q( O! K- W02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]( U( `, `$ w# } k
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]+ K0 _$ c3 S& \6 I' c r
02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]+ |( k3 V; c' D: N3 j& h
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
/ }4 x5 t2 H$ b$ `02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]& Y( r4 p5 O# X3 }+ E8 y
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
! s! f( ^4 @7 _1 }" e% q02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
- V: G$ o9 \2 q+ o02A0EAC0 |. |83C1 70 ||add ecx,70
' r) D: P1 K/ C02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
% w) Q/ C" G' |& S( N3 p7 l) m( V02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
% E A* p. ]' W- K n" G t! x1 l02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]9 p1 b7 D& A7 b6 f1 s( C( U- P
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
% t- }' V5 R+ F& _02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]
7 X; V1 W/ P7 t& {02A0EAD2 |. |03C3 ||add eax,ebx2 X% h, q7 R. s; b) Z9 E! i; z
02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
2 u* m, {& q4 Z( D5 k3 ^- Y3 s02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
1 a% ~0 f3 \; K
# I/ O) E- b8 I. I. b5 J本游戏字符编码采用UNICODE,
- [1 p. V9 s( ?( I. k! h6 C6 N& l对字符码表的操作:
9 p# n" l" A5 e- C9 f10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码* K( e3 f% E7 ^5 q
1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]
K# Y0 n% c) H. K: q1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址. F5 W- ?: M: c" I- z; q: O
10028810 |. |33C9 |xor ecx,ecx
5 R+ ^6 B" z1 F4 Z) E10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]" T# g" p2 r( {! _$ \
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]
( j" M& t- v9 V10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]. t( h9 H9 x" }. G* v, c. i9 O1 }; j
1002881D |. |D9C0 |fld st& e; |5 p" `8 a: R5 C7 d
1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
0 R. z" u. W7 b) N# m10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
; `5 B8 w& Z( C: G" [10028826 |. |D9C0 |fld st
1 z3 Q( C* ~0 }10028828 |. |DEC2 |faddp st(2),st
* S2 ?1 y. m, G1002882A |. |D9C9 |fxch st(1)
- T! W7 X2 A! B& A% D: _0 j1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
9 }& [2 f/ a& r4 S10028830 |. |D8D3 |fcom st(3)6 d' T* i3 X$ D
10028832 |. |DFE0 |fstsw ax% X; h3 i; h$ W: e0 o& X/ v9 Z
10028834 |. |F6C4 01 |test ah,1# X* L; \. C" R/ f" O. @: u4 {
10028837 |. |74 2B |je short xcEngine.10028864
% r# S2 t& L- j2 z10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]7 F0 f. L9 z4 k. Z
1002883D |. |D8D3 |fcom st(3)5 U8 U) `. B8 E4 [% u; Q( m5 `$ c# h
1002883F |. |DFE0 |fstsw ax: P$ c6 u8 p/ i
10028841 |. |F6C4 41 |test ah,41
! f6 }& }3 v1 I9 O- y10028844 |. |7A 04 |jpe short xcEngine.1002884A3 w+ _0 R/ X8 Y$ p4 r* {8 p" s+ e9 T
10028846 |. |DDD8 |fstp st, Y# Q. M" \3 A" G0 \. V9 \
10028848 |. |EB 1A |jmp short xcEngine.10028864
% V' c* ?) s" `8 R# ]" h1002884A |> |D9C9 |fxch st(1)
4 m, \' h; P2 @" ^1002884C |. |D8D3 |fcom st(3)
* S+ `+ I' p% J9 s4 n6 |& T1002884E |. |DFE0 |fstsw ax1 L& k: p8 {# @3 X# Z) B
10028850 |. |F6C4 05 |test ah,5 p* `. z. C0 l! ]' b( M
10028853 |. |7A 04 |jpe short xcEngine.10028859* z' a4 Y! ]- @; A) \) ]
10028855 |. |DDD9 |fstp st(1)
; l! v: Z- j5 S. u% r7 G1 U10028857 |. |EB 0B |jmp short xcEngine.10028864
& L# r" G, S6 h8 ~& @10028859 |> |D9C9 |fxch st(1)
" E, w. _+ Q6 z: G+ n1002885B |. |D8DC |fcomp st(4)
( |+ f9 l+ m% N( D# B2 R& K1002885D |. |DFE0 |fstsw ax
. _/ H$ F1 u" ]. D) h# B# z- @0 X. |1002885F |. |F6C4 41 |test ah,41/ f' U! {+ ^) u# t( I# K
10028862 |. |75 05 |jnz short xcEngine.10028869% |, L3 \1 B) l" t8 A: a& C
10028864 |> |B9 01000000 |mov ecx,1
/ w. h# z3 A/ k' [8 x10028869 |> |85C9 |test ecx,ecx9 J6 N6 O$ J |1 u
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
/ h. `: L5 R* u! i( b, f3 N& C% L! z1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
, O3 G+ G: e' U( W4 \3 F10028872 |. |DECA |fmulp st(2),st
) J# {, i: }' r10028874 |. |DEC1 |faddp st(1),st
- m: E e/ y% A! U10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]
3 m8 i" C* @% n1002887A |. |75 05 |jnz short xcEngine.10028881
6 }% p1 {7 X3 n1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
0 h, |/ g c; z: ]7 l m8 J" Z0 \10028881 |> |83C2 02 |add edx,2
Z! d/ O7 c& p8 s% i5 V# \* v10028884 |. |83EF 01 |sub edi,15 M- u7 \- t( S- ]% Z% ~! z- ~8 i
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288073 [0 j& S9 ~0 e J5 {2 W
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |