写屏函数:
0 `$ @$ B3 }! @/ Q" ], G( F; [02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]% @( h* T# n' I8 S
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
3 F# [ `$ n8 [$ P02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]& P- Z7 C1 K3 {! u& h
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
4 J. M/ Y- G( U; w02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
* S( e: V- D% a2 Q2 W, ^02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表/ i J& ^; e7 Y& r$ m
每个字符码表占24(16进制)个字节2 X6 e8 W* G H, ]& x
02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
9 g8 j" v% X: a3 C" m3 W1 c( t2 S5 \02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址' `- s9 _+ k8 D2 R1 v0 P% L
02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]9 J* U" V1 i( O( B
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一 L5 @6 O1 c" w/ I
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
( a+ m) A0 x' F02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
9 X9 G9 I; v6 | L" I02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
2 P0 m" R5 P" b3 J4 W2 b/ O0 |6 I每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志+ C3 n1 H" I0 H0 z x( S
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30] W8 _( E' _" z8 a5 X& G$ }
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
& _" ~+ |' @3 ~/ D/ R3 ?9 l3 |02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]* u6 e; o3 u! S, @" \
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]% e' w- p& y" l# D8 \) U7 F
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]1 M5 I* w( I( j3 W
02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30], k$ \; }- G1 v1 }( x) a9 J9 {
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]3 D4 }3 H2 y( \- O4 e% a2 u
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]6 R. |4 i+ v8 g ~
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
* z5 x: e( i- E4 x: v* a02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
& z. T, I# F) I6 ^! `% A. j. H) |/ v1 T/ }02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
" I4 e) o0 ^& j4 x( \# y02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
4 ]4 y( u2 r1 F" [02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]3 b* @9 E# i2 t* k* A* @" J
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
& X' `/ k; [ D! l) Z3 O! x8 `02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]0 k: ^( @+ ]: c+ X3 S5 W
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]$ v, X, Y9 Z4 r. w8 O. I$ @
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
T. ?, O. q Q7 t02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]: r- b! l3 I& L t* K
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]0 S2 z# g: ^& _ \' y, ^
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]9 l6 ^8 V0 ]3 u! o3 ]
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]# D* w; Z+ `8 }6 ^; C4 y6 s4 ^
02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]4 }5 ?. P3 f3 v5 w% ~0 m
02A0EAC0 |. |83C1 70 ||add ecx,70) o" f9 @5 h: B: K: \: h* q
02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]; T% e8 B9 k& F$ L6 I: h) b
02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
U+ z3 }! |, k6 N7 O) _% \02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
: Z1 b( L/ v d7 U% g02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]3 y h/ j5 }7 d! t
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58], X8 ]5 ]* X' Z! i# [
02A0EAD2 |. |03C3 ||add eax,ebx
8 v2 _6 A8 |: b, u. e. L& Z02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]; }: j4 I; n6 a: c, V2 i4 H
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C2 F" P) d' z7 w) Z9 |
# D$ _- @4 {7 n( ?' R2 w$ C$ R! g本游戏字符编码采用UNICODE,
1 F; x2 \- @% B4 h. Y4 t/ j对字符码表的操作:9 C9 W! ?. l. n; P$ `0 v
10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
3 r- m1 I1 z5 q% M1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]
6 A1 [( \! X' V: S- _( b, w1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址; V$ H" g. H0 y; V$ t! H+ a
10028810 |. |33C9 |xor ecx,ecx' K, w4 y' X5 D) R) H
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]
( V" Z" a: r# _/ b0 U' h) z10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]: r- U5 s" n3 Y& W* M
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
/ l0 \5 m% ]0 W' E1002881D |. |D9C0 |fld st
+ W& |$ r* `; ?* T) j9 \1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]3 D* D6 v+ P" R7 `
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C], l) [" T3 [; J9 D
10028826 |. |D9C0 |fld st
* s$ v& z. Y/ h4 Q( q6 X! Z3 U10028828 |. |DEC2 |faddp st(2),st8 _$ g- k9 x* m( U' @+ ?* ~1 D
1002882A |. |D9C9 |fxch st(1)
M T s$ o) E# M1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
, x2 J8 u9 @$ }" n3 I6 z; c+ Y( s- H. Q' q10028830 |. |D8D3 |fcom st(3)
8 }( ]' d* e$ s10028832 |. |DFE0 |fstsw ax
3 W/ F4 | M* ]8 b+ l10028834 |. |F6C4 01 |test ah,1
( S0 b/ J) p2 R; o" i" s; V2 s5 l10028837 |. |74 2B |je short xcEngine.10028864
8 p% U) o2 y1 ^8 \9 z. I10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]+ c }; I% X0 _ ^" |1 e; s1 ]+ A& e
1002883D |. |D8D3 |fcom st(3)- K& g1 Y: t) D* z1 I6 l0 p
1002883F |. |DFE0 |fstsw ax1 C8 | m- F; ]8 d
10028841 |. |F6C4 41 |test ah,417 a1 d4 v5 s5 N, P' R' P- [; q
10028844 |. |7A 04 |jpe short xcEngine.1002884A
6 @. H. C+ t! l2 _( {- w10028846 |. |DDD8 |fstp st
* j: J3 [. k8 ?) {6 C# L10028848 |. |EB 1A |jmp short xcEngine.10028864
5 U/ c& Y$ W2 `1002884A |> |D9C9 |fxch st(1)" j; Z1 C4 s0 \. q% C. q& y
1002884C |. |D8D3 |fcom st(3)
' p$ l& I \& m3 E+ ~" l( N3 [1 h1002884E |. |DFE0 |fstsw ax
6 z6 l$ m5 ?1 h10028850 |. |F6C4 05 |test ah,5: @8 q# `# J' H- f
10028853 |. |7A 04 |jpe short xcEngine.10028859+ b" l7 F. D p4 E& D2 L1 |
10028855 |. |DDD9 |fstp st(1)/ e1 y6 N2 m8 v7 m3 Y- L
10028857 |. |EB 0B |jmp short xcEngine.10028864
* {! s8 l3 N' Y' ^# ]( i10028859 |> |D9C9 |fxch st(1)
+ f% } e& z- `5 G1002885B |. |D8DC |fcomp st(4)' x9 v) A7 @: ~ f' y/ z3 M" _
1002885D |. |DFE0 |fstsw ax- Z! \& g. @. W2 b
1002885F |. |F6C4 41 |test ah,41 ^7 P( _" K2 f
10028862 |. |75 05 |jnz short xcEngine.10028869
2 F/ ~/ A5 e" O- k1 O* L# A; x' H10028864 |> |B9 01000000 |mov ecx,1
5 H4 K. B0 d" @/ m% O10028869 |> |85C9 |test ecx,ecx# e) R$ L, v' e: j' Y, b$ P
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
6 C) `- l+ ]: f, b& P G1002886F |. |D940 14 |fld dword ptr ds:[eax+14]0 M+ W' }6 o! K! W4 V
10028872 |. |DECA |fmulp st(2),st8 Q' r* o7 F: H/ k
10028874 |. |DEC1 |faddp st(1),st K( w. t8 J$ l$ ?* Y
10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]# X/ I3 s0 W: f9 g0 E
1002887A |. |75 05 |jnz short xcEngine.100288817 g! Y! A4 F4 d' ^, Q7 U' s
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1/ G* C; a7 g1 h# v
10028881 |> |83C2 02 |add edx,23 k; ~6 b0 k2 E! X) U
10028884 |. |83EF 01 |sub edi,1
* V( W! U' j% @$ U" j; W10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288075 O% z( |. M5 v/ Q' `! T9 n* |
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |