写屏函数:
. K( R( y- Q3 L9 h8 y9 P02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
: m* ~! z! u: R. T/ I02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
) X& D- E7 z1 T- d( \; N02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]: V% H1 X, S9 `- Z+ E/ g* Z
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]7 O9 W9 H5 \! u' E3 a
02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]0 x$ [; D) t7 ]8 q& w8 u
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表
7 [* o4 p& n; D) p! a1 l C# _每个字符码表占24(16进制)个字节
B! E! K1 @9 q8 s, O/ |02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]% k$ n* A4 V$ M4 g
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址& y$ v( n: K% }
02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
0 J* a" N( s0 {2 Z3 o; W: u, \02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一2 o2 u1 @3 B3 o# K! q1 |
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
% }% U- U" B4 I3 H4 @6 s02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
/ B# k8 c4 M- M, p02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
6 _! q" a. P6 U% f% i' M每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志! ]! H2 R2 }. I+ _
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30] Q& r4 @& j: }4 g( y
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]4 R7 ?% c4 M/ o+ r3 d
02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
# g, f4 B6 R, L+ c& s; Y02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]7 g3 N' ]& v: @8 @0 Q
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]6 M0 |/ m6 x1 L. U" L: [+ Z
02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
( j, O9 q' d4 i- z$ T02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
. w1 b8 ^: i+ W/ u02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]8 W. |" Q1 \1 V- E! J. A2 F$ N
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
' A1 M, k8 M7 H: }02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
. Y/ E* ~; V q8 m A7 f: A. O+ I02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]( B: a- o3 Q! q# x7 `, o, o$ y
02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]+ i+ \0 Z1 k! `9 {7 [) Y
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]
* n0 G' V9 q* y% o: _! t4 H4 ^02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]2 Q' B% A& L7 N! I6 l
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]' {; g: H2 b/ Z& x
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]8 [! \* G0 i. i% H8 ]1 k
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
% {% r& l1 p: X( A: `02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]0 g$ {+ M. G% T6 P. x+ a! ]/ C
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
) R! S: ~0 ^; {- U02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]
7 ?# r3 b h2 b7 u4 {5 R# ]02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]
8 m. o; T7 ?" e& e9 C h02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]0 i2 g+ n) }0 c4 {% B; ]* q$ j9 v
02A0EAC0 |. |83C1 70 ||add ecx,70
* ~# C4 K% X7 _7 ^02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]7 R6 J8 I" F2 |( D+ E% H
02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
) L, Q# S$ Y l* f' f' K0 Z3 A02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]3 w& h, [& q @! ^& e
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
7 e# x3 _7 B$ U0 X02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]3 W/ j9 h9 T! p7 ` M8 ]; f) X- `" R
02A0EAD2 |. |03C3 ||add eax,ebx
6 E3 T( ]* J1 H5 V* D' z02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
" K% o' p% F2 m1 {( X02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C' [7 n) l {3 D# s
: ]7 p8 s& ^, M* }2 `0 S( m+ P) V本游戏字符编码采用UNICODE,3 I# Y. X$ ?2 k- i8 m8 w
对字符码表的操作:
- {! G7 D% v \) |: K& x10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码& d0 e8 U- [$ K2 W
1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]
2 j/ Z7 c3 Q2 e: k6 J1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址5 i, j' o8 Q! j& G1 u2 s& D. P
10028810 |. |33C9 |xor ecx,ecx
6 g. i& h7 ^/ l0 z10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]
) \2 J" O4 Z, j+ d2 E, j& r: a3 m10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]4 `$ F5 l- `8 q% m
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]9 ]+ d9 m, g" C! I5 E3 @8 f$ z) I
1002881D |. |D9C0 |fld st5 Q" b6 n- B9 P8 Z7 E. c( e, |
1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]4 B- C" @0 B- K0 A: i
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]' k" e9 p5 T' N) F- X; W
10028826 |. |D9C0 |fld st
8 v- o# k# B+ x; j9 N1 ~4 y+ I10028828 |. |DEC2 |faddp st(2),st9 G" B8 V7 `! k7 p1 L0 X
1002882A |. |D9C9 |fxch st(1)
+ K7 k' L- ~5 W9 v# z h4 V2 J) Z& _1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14], Q# N: t( n* ]7 j" b
10028830 |. |D8D3 |fcom st(3)
) `0 T, N2 g6 t( k. g10028832 |. |DFE0 |fstsw ax
8 Q4 @5 O6 U3 x/ t/ D10028834 |. |F6C4 01 |test ah,1. y: {5 {4 E* l( s. y8 y7 e m3 S
10028837 |. |74 2B |je short xcEngine.10028864" K+ J } L6 k* o# P
10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]; |; \; V4 M: l8 K/ b$ E+ q! a
1002883D |. |D8D3 |fcom st(3)/ v& T, k7 w. d4 R
1002883F |. |DFE0 |fstsw ax$ t4 x& g) N# ~! y' K1 W6 |9 T3 r
10028841 |. |F6C4 41 |test ah,41! G' E: n5 w, F8 t
10028844 |. |7A 04 |jpe short xcEngine.1002884A/ {6 B* a& M) R2 r- k
10028846 |. |DDD8 |fstp st
8 o; V. L' I+ ?4 Y. t, V |10028848 |. |EB 1A |jmp short xcEngine.10028864
+ U- c% N/ Y8 e1002884A |> |D9C9 |fxch st(1)
. n+ }! p4 r* F8 f% h1002884C |. |D8D3 |fcom st(3)! t, r; R: q, Q+ T
1002884E |. |DFE0 |fstsw ax
, J, _! L( o6 N6 j& C# K10028850 |. |F6C4 05 |test ah,59 s( V" t& r8 K/ R$ n
10028853 |. |7A 04 |jpe short xcEngine.100288594 Q6 i7 }; ~* r+ o0 e
10028855 |. |DDD9 |fstp st(1)3 M# y0 v; |4 `: [0 X. v9 T
10028857 |. |EB 0B |jmp short xcEngine.10028864; c7 R' @( k% S& R
10028859 |> |D9C9 |fxch st(1)4 ^; ^1 T5 _, X# R- w
1002885B |. |D8DC |fcomp st(4)# i9 f- r7 Y& k! d% J
1002885D |. |DFE0 |fstsw ax2 q% G8 R3 [$ K& \7 i/ I0 b
1002885F |. |F6C4 41 |test ah,41
; N' u+ }. F0 V) y. N/ u. j10028862 |. |75 05 |jnz short xcEngine.10028869+ |/ g) i& s+ ?0 T1 [
10028864 |> |B9 01000000 |mov ecx,1
3 \4 p& { X+ A1 r10028869 |> |85C9 |test ecx,ecx
/ R* t- P: ^7 N- X! o1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
M- a9 B- E. v1002886F |. |D940 14 |fld dword ptr ds:[eax+14]1 r2 \1 K/ j( b# ^" c: ^$ t
10028872 |. |DECA |fmulp st(2),st, y6 H+ }7 r. R* n7 P
10028874 |. |DEC1 |faddp st(1),st; Y, X3 Y9 L' T/ \7 c4 i* |& s
10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]' e0 G. N7 F) @$ ]
1002887A |. |75 05 |jnz short xcEngine.10028881
! a1 N' R6 \& Z4 c1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
& ]; ^" {' @( @& Q5 H; n j10028881 |> |83C2 02 |add edx,2
, Q6 m1 i0 h: p2 M4 L- ?10028884 |. |83EF 01 |sub edi,1
/ N2 q: v4 Q6 z# ]4 ?10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
, o& d V* H2 S/ J% q8 b3 |由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |