写屏函数:
6 d+ J4 @% j. J+ \, S& x02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]! q- @# r5 D# J' M# q* ]
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
% y% Y5 K! n9 A02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
7 |) j5 d2 ]1 L7 R02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]8 w; z: L! M2 U
02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
# j0 B3 C( [3 s02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表, I. u* l* X( b7 l' N, K% U
每个字符码表占24(16进制)个字节
+ F& `3 R) I3 k0 |8 r5 ]; Q02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]1 h: X: t3 _& c1 C' U5 j6 f" U5 w
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
( l2 D1 k9 c8 v: \02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]" l8 c7 d/ F; C& E
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
/ I6 l7 S8 ~4 R1 Y! @0 A02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
9 {9 ]* x# k# D: m8 ?. B02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
( l/ B3 |, z; B4 O& w! t02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址# j7 L6 Q: A1 E4 w$ Q# C
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志; P2 n R! U/ Q" }( ^9 e* k0 M; p! x) T
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]3 }! x& t" g, s2 L4 _
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]# L4 m0 c5 x, p& t' X
02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]0 T, C: w, W. A8 {; G
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
# P9 b/ G7 l) Y$ L2 n# d02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
8 B6 D7 j2 R7 e. D1 ]3 J02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
2 A, ~6 r7 h* f: g$ ]* s! \02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]8 U6 B) `; A! k5 w
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
) `" Q! T- B2 k2 H02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]0 \1 n( e4 ~! S# n9 p1 V: S2 R# Y
02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]+ F+ _. v p4 u, ]/ h9 P/ x5 S6 L
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
) l3 U6 s4 T2 ?; |, i/ D0 {3 {02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]& H* O Q5 T# R: \/ E8 s! i
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]. m3 n6 m1 P5 N, Y
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
/ l5 |1 }+ b+ O5 G) x. n, c02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]# H, W# v6 U% ?) t" k
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]; v! g. F( J- C# M1 b+ g
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
9 s, N# D& g( j& ~* Y& E02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]
! K6 K" P) P# y/ Q02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
# W' D8 B! H9 K0 F# O; @02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]1 Q O7 g- X$ m* z& X! x6 `' k
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
2 [& Y9 v: o9 O7 O( K- L8 H02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]- ^& w% u4 E+ W
02A0EAC0 |. |83C1 70 ||add ecx,70
' J7 F! Z; U8 ?; X02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
# F+ d' n7 y/ d' B4 u9 v) @) Z02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
9 z) P! K( l y; G1 ^9 O/ F# K02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]2 O9 g( _% g) j5 j4 Q( Z: g
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
: z l# ~- y! O C9 F02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]$ W" W2 [7 n( D! a1 B
02A0EAD2 |. |03C3 ||add eax,ebx
: y" |% ]# ?9 `! ?1 ]02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
4 t! n, r7 {6 h1 Z2 {# J02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
7 l. R" a# U. k p! M+ L- e% b0 X' q- x' R( W0 [0 e* Z! @2 U
本游戏字符编码采用UNICODE,
; e7 I9 \! W# H2 }对字符码表的操作:5 @ ~) }7 H% u$ G: E/ W% n
10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
A/ a7 p5 h& D$ h* @1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]6 P" L) e- S7 N
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址" H5 ~" g& K/ C% z
10028810 |. |33C9 |xor ecx,ecx
8 c+ y; o! x: V8 z# V0 r5 P7 I10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]
& C1 p3 `2 j: z' t5 l4 M10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]+ J: i: L4 x3 `- p
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]% E& k# T* t: X4 U& H
1002881D |. |D9C0 |fld st
) T/ ~' g# e9 o* L) n" D& [; T9 d1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]. B3 r; d" C& F
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]0 p+ C$ W9 i3 u' j& p
10028826 |. |D9C0 |fld st
8 d' {, F2 W. d; E- G: B1 o10028828 |. |DEC2 |faddp st(2),st# O. c) o" c0 i: M& g
1002882A |. |D9C9 |fxch st(1)3 ~* ?% X! F- C l
1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
, ]7 {" R/ ~( r10028830 |. |D8D3 |fcom st(3)
( c) B6 i0 x+ [! q& d# x% q10028832 |. |DFE0 |fstsw ax0 j& m+ ?* |+ b; [3 u% \
10028834 |. |F6C4 01 |test ah,17 q$ b" [6 R8 G% G) c9 n
10028837 |. |74 2B |je short xcEngine.10028864' S5 n" c( E4 y6 `2 V
10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]$ S5 ?# j. ?* K8 W; ?# b8 e
1002883D |. |D8D3 |fcom st(3)
' t7 ?/ x; b8 `+ G- G1002883F |. |DFE0 |fstsw ax
. v9 ^ ^" q4 ]% U% ]% s10028841 |. |F6C4 41 |test ah,41
' v+ W4 g5 @, h; S6 |1 n# i10028844 |. |7A 04 |jpe short xcEngine.1002884A6 ]3 @$ Y0 |8 g; g c% R4 W
10028846 |. |DDD8 |fstp st$ X1 {6 L7 ^1 k4 ]
10028848 |. |EB 1A |jmp short xcEngine.100288645 W: ^0 ]; d6 R1 _- x j' H
1002884A |> |D9C9 |fxch st(1)7 u$ S0 g: E% Y
1002884C |. |D8D3 |fcom st(3)" g0 a/ V6 A7 n4 S9 Y" @
1002884E |. |DFE0 |fstsw ax: R2 S4 @! O6 x0 G5 k8 d c6 w! K5 o
10028850 |. |F6C4 05 |test ah,5* }: M, k C3 G6 O: H
10028853 |. |7A 04 |jpe short xcEngine.10028859 L# X I$ h: C" S
10028855 |. |DDD9 |fstp st(1)
- ~: G4 X8 z) I' W& |" G10028857 |. |EB 0B |jmp short xcEngine.10028864' z, A. P x, Q% B+ s2 f: j
10028859 |> |D9C9 |fxch st(1)
( h2 _+ H/ K0 `1002885B |. |D8DC |fcomp st(4)- }: b) v5 C! V0 G
1002885D |. |DFE0 |fstsw ax
# \1 f6 z) U4 x @" E& @( I: R# h1002885F |. |F6C4 41 |test ah,41% ~8 p4 O; ~6 J
10028862 |. |75 05 |jnz short xcEngine.10028869
, V% ` w0 J, A+ s [6 b3 u10028864 |> |B9 01000000 |mov ecx,1
3 X8 q6 S9 p; T* A6 U10028869 |> |85C9 |test ecx,ecx" w( _8 D, g5 m, E- X
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]+ M; ^( {0 w0 i/ y q0 ^
1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
G! S6 h6 B) E3 r10028872 |. |DECA |fmulp st(2),st' N0 O6 O0 U7 o% i' Y3 C4 m
10028874 |. |DEC1 |faddp st(1),st
1 X, U4 Y! i% h: L1 W5 g( {7 L10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]
1 ~7 s$ |# L$ [7 t+ k9 @1002887A |. |75 05 |jnz short xcEngine.10028881
: ~( F" Y {9 ~$ e* q! ^- v1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
* C8 }: `9 _) a4 u h4 }: [10028881 |> |83C2 02 |add edx,2
0 Z4 y' {" ~( \+ T10028884 |. |83EF 01 |sub edi,1* _8 |% |9 \$ N! t: B9 k
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807( T! t6 h$ U4 _5 Y3 }( x6 t
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |