写屏函数:" O6 h1 O5 z* B* I/ c
02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
+ I: G1 N" @! f( z4 m02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
+ m/ F! U$ u+ F" \! t. n. d02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
5 R: r- Z- ~+ s02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]4 q, e0 v- @) T: A8 J5 M+ k
02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
+ L. b' j2 ]9 t02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表% f9 q8 B) }- Q* i: |! _
每个字符码表占24(16进制)个字节
* F( Y2 L3 c8 j7 o3 ^02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]3 ^4 {5 \2 r4 q/ S+ x e
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
* o5 S) N6 G+ E# I5 J2 R6 p# y+ ]02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
5 `9 @! \& p8 Y02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
* j( H- m- ?" _9 ^- y02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
. U' r4 {! @, q/ o8 X% {02A0EA71 |. |D900 ||fld dword ptr ds:[eax]- Y/ c3 N7 p1 H4 u' Y) P. c" X
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
! c. T* t4 u7 r# ]" {每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
$ H* q9 [$ G* R' r* `02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]
% W8 y. p+ x" F/ z5 w02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
& ` C- y7 S8 c6 e9 Q5 L02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]3 X0 @3 Q: i; ~' z& k
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
6 b( S# [/ z& K U6 @02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]# w+ Q" L7 w2 A; G5 ~
02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
" G' Q3 x F/ ~( F$ g7 P02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
7 Y7 y% k5 A1 z/ H02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
( k+ m* i' C$ r( U* I02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]# [! w& ^( @. ^' c: h1 A
02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
9 V( v. O) Z ? H+ ~) O02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]. E; A2 S- h) a
02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]$ V! ~! L0 g Z% ~
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]- S0 q* e2 P% ~
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]4 P( b3 k m7 t; y
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]0 {: \7 A! v& l7 B
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]6 {8 F! _* n1 v9 a9 y
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
& A& S% r. d) N2 Y& ]02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]8 Y9 ] y: Q) A6 `6 E, e
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
8 M# A p- I$ N8 a6 S& o02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]' l3 { E7 `& B& R0 k" T* P2 B
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
4 K* w: M! Y4 @: |& a. U* H02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
5 Y" h4 ?: H2 n3 w0 p$ P/ i02A0EAC0 |. |83C1 70 ||add ecx,70
) x7 A, O0 ~, `. |. \. E02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
! F- ]' P3 h( W02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]+ {8 n9 t( u6 H) E6 Z5 t/ @
02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]0 q. o% v" U- d% [! N, A
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
0 A: r+ S" c0 l3 R1 s( `3 v3 M02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]/ Y$ o4 p9 E. \, i* [2 v- ?
02A0EAD2 |. |03C3 ||add eax,ebx
2 t, _; k! K% M2 V02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
$ Q) L. l) B o, }02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
: M0 m* `; l p3 e/ y1 j+ [6 a6 y. K- `# @" w
本游戏字符编码采用UNICODE,
' n6 D( Q' U! W, O. D对字符码表的操作:- O1 H4 }- z: P% g) T1 j
10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码: j- I" \5 j. E0 n- K r
1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]+ `1 I- Z% t& g
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
2 e- f$ Z& b# r9 i [2 I10028810 |. |33C9 |xor ecx,ecx# j$ Q$ A) n/ _# r% d. T; g; h
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]( i7 {) n9 M# r
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]2 j; v+ ~1 F2 z( ?
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]. A5 p; y; H2 V& B
1002881D |. |D9C0 |fld st
6 L: z5 x7 C3 V w& W- ]! A# Z1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]4 L k# Y4 u3 }3 C
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
" n) k# R4 V: f" m9 {10028826 |. |D9C0 |fld st
, K, V$ {3 n; r3 {" s- ]8 T10028828 |. |DEC2 |faddp st(2),st. }4 [' B( o1 P/ s: d
1002882A |. |D9C9 |fxch st(1)
& g. ]4 c" f6 X' p1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]* }. j, ?8 q* o) q
10028830 |. |D8D3 |fcom st(3)
) }5 V a( a' P10028832 |. |DFE0 |fstsw ax
0 q5 _* _* A5 I/ F: M10028834 |. |F6C4 01 |test ah,15 ~! H& h5 I2 L- G5 Q, I
10028837 |. |74 2B |je short xcEngine.10028864
+ j" X/ X! N! P, Y$ X10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]1 k3 S7 b7 e# P8 j7 H+ _) v. ]
1002883D |. |D8D3 |fcom st(3)
7 h* W2 E% F5 E2 V1002883F |. |DFE0 |fstsw ax! p1 V% Q, H3 W' i
10028841 |. |F6C4 41 |test ah,41+ D0 t) x( Y) {& h% o7 i
10028844 |. |7A 04 |jpe short xcEngine.1002884A, r) Q! E1 W; l& q. G
10028846 |. |DDD8 |fstp st
( t4 A2 G6 y" @5 t8 I3 O! Q t10028848 |. |EB 1A |jmp short xcEngine.10028864
) O& X, h4 g- ]! y& F0 T1002884A |> |D9C9 |fxch st(1)# c1 h$ P! _0 u( f u: x& I
1002884C |. |D8D3 |fcom st(3)
: r; F B1 ?# N$ K1002884E |. |DFE0 |fstsw ax
% T, L* s; l: t5 s1 L, k9 X5 R10028850 |. |F6C4 05 |test ah,5
E2 `" |& U: g* o9 b% M9 }$ g10028853 |. |7A 04 |jpe short xcEngine.10028859
9 a8 {7 ~4 J7 }3 U% i10028855 |. |DDD9 |fstp st(1)0 m3 w2 d$ U3 h' A4 R q5 M1 B
10028857 |. |EB 0B |jmp short xcEngine.10028864
. i7 Y# e7 N% ^) k4 N# P10028859 |> |D9C9 |fxch st(1)
! T l) A, j/ j# ^- H5 y/ C1002885B |. |D8DC |fcomp st(4)
$ B$ h$ {" h6 x0 C; J9 g1002885D |. |DFE0 |fstsw ax
) q7 |6 Z% S: {( M, K1002885F |. |F6C4 41 |test ah,41
7 j: n! L) q0 M$ m j10028862 |. |75 05 |jnz short xcEngine.10028869
. \& l) }4 i* n; f, D10028864 |> |B9 01000000 |mov ecx,1
2 t4 X$ z5 Z) {/ [$ t6 s10028869 |> |85C9 |test ecx,ecx" K9 {& ~6 H7 ?9 r; |
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]+ F) P) I: Z( G6 x3 i* g
1002886F |. |D940 14 |fld dword ptr ds:[eax+14]+ }& J4 }: [3 }. W* k/ C# T
10028872 |. |DECA |fmulp st(2),st
4 y9 G) i) N- e! {! n) q) @10028874 |. |DEC1 |faddp st(1),st
5 Z' q" j8 r5 R- g7 o: {10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]3 L8 q: C/ j# C3 q9 |
1002887A |. |75 05 |jnz short xcEngine.100288810 H; m8 @/ M/ h7 m- B
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
. V! T; j5 e+ ^# \/ Y0 F+ y10028881 |> |83C2 02 |add edx,2
6 G0 m9 M M; w4 u1 f8 k {. V: u$ a7 A10028884 |. |83EF 01 |sub edi,1
& F$ t7 q7 u, ~$ T+ m2 Q10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
, `5 j6 y* E1 W+ M4 K由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |