写屏函数:
6 G2 I1 a8 h' B6 I" b% R3 e3 @% s) |02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
8 W Z, ]$ K% J02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码6 l9 h0 g9 k' T3 o3 @: c" e% y' P
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]
+ M7 X# a4 Z% C7 ]% p# n5 d2 B+ d. |02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]( `/ q2 G( ~7 ]/ _- A
02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]. Y# ?1 X$ T7 d6 O# `) S; U
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表6 ?7 w% _+ v. u8 y- ?) X
每个字符码表占24(16进制)个字节* Q. O% t. ~) `- P! U+ I( w
02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
9 c- j" ` ?4 R/ e02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
* H0 L2 u) O0 R0 I02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
8 b0 I" j7 W6 b) ?02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一. H- l7 o6 M1 i! n
02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
4 g& z: d1 I! L+ u02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
. V: u! a' `: h$ e" Y* m' G02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址" ~( O. L8 K* O1 X' N' @
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志4 \. S; v% }1 X, g4 D$ { ]8 W: e
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]* [2 K$ ]' e& y# h- h
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
7 V( V( K9 s, h: _# t1 e02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]5 N$ w0 t7 D$ o& `! Z
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
# f- P: a1 {, ?/ {1 Q: L$ \02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
) a+ z" x+ S- e8 @' m: {. I02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]: g- f- d$ J4 E& e# ^
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
# R+ _9 U: N+ l" h9 F0 @02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]7 _2 h6 H, }( L0 Z; ^$ c
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]: R. W: X; |- r9 ?( j( B7 |2 i' ?9 J
02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4] \7 I. B: L' |3 x% S$ o4 x
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]! \( X/ [/ Y) _: w# [ L2 u+ f
02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]3 a' k- a4 u8 ?# [- l# O
02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]$ I/ H. @4 Y2 D, L, G- j$ a
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
* e( f& h8 R7 V5 F4 R02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]/ Z( Q+ q: L% I+ {+ @) m
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]* x& S- m- f9 X5 U: k3 N" r
02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
; ^/ n, b! ?8 f' t" A1 \02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]3 B: N: ]& L0 g. V7 t
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]- a6 c* C* q7 i. N/ h. W: P
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]
. ^5 u4 Q8 b1 e3 V8 D# o0 W; {02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]: T8 x$ |8 M8 s* M
02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]" x8 r( X! j" D4 }; |
02A0EAC0 |. |83C1 70 ||add ecx,702 t' G4 s% ~7 V7 h: N2 k
02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
' ^! T& ~$ n3 S# u, B02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]0 }, C. H e, ]% z% O& L
02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
- R. }) q; H Y- x- B( [02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4], ?, G" i1 y+ H" m& |$ s
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]' K, K3 @9 m; T; z
02A0EAD2 |. |03C3 ||add eax,ebx
- I6 e) a# X1 ]02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]
7 y( V0 Q: e$ k) ]02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
. S4 D. [5 R8 h+ z/ y" U7 v% g( P/ i' ~* ]7 x
本游戏字符编码采用UNICODE,3 r* x. k8 k4 n6 y1 e$ t
对字符码表的操作:
% w) Y2 F& O8 x/ k: N' L10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码7 L4 }/ e+ P* q! l2 q; H+ n: R. L
1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]' V5 p* Y' Y5 `: u) d$ w* S* r$ ?" ?6 D
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
+ O. T2 r# t1 Q# D10028810 |. |33C9 |xor ecx,ecx2 k2 e! S/ d$ Y* I3 \" ]& w
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]: t7 J6 N, A& N; l! t
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]7 e1 s! ]* r8 b0 K0 `2 |
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]/ y; o% `/ Q' x5 M6 U/ z
1002881D |. |D9C0 |fld st
. v- ?8 {# c& D1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
& h# A! Y* J* T' Z- b) z0 f* a10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
: o n k- @1 K1 m: }10028826 |. |D9C0 |fld st2 A6 X3 Z, ]. C6 Y+ T' {! J
10028828 |. |DEC2 |faddp st(2),st
3 H4 x$ T' }1 W/ l1002882A |. |D9C9 |fxch st(1)
# ~2 n- D+ X7 C( U1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]
; w& W4 U/ V: S: ~10028830 |. |D8D3 |fcom st(3)
8 T) U! f0 r F10028832 |. |DFE0 |fstsw ax
D5 V" j3 D2 @+ \* l0 I) v. i$ C# i10028834 |. |F6C4 01 |test ah,1; F( ~5 r3 z0 ^) i
10028837 |. |74 2B |je short xcEngine.10028864
: x' t5 o q- }. V. P( { X- |10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]0 _$ D, X& Z6 i0 w: S6 V9 f
1002883D |. |D8D3 |fcom st(3)
% C) Z. }7 W6 D+ C2 b) P7 n$ A1002883F |. |DFE0 |fstsw ax9 Y( Y! O0 ` R, D6 X# B5 K
10028841 |. |F6C4 41 |test ah,41
( }3 ~, Z$ u9 w2 B8 E, h10028844 |. |7A 04 |jpe short xcEngine.1002884A! s) b! Z; M3 ?
10028846 |. |DDD8 |fstp st
K# T! H/ v1 V. N10028848 |. |EB 1A |jmp short xcEngine.10028864
8 ~- k, n& Q/ k* f- k1002884A |> |D9C9 |fxch st(1)
' c9 G' z, Y0 C8 f5 f# @0 u1002884C |. |D8D3 |fcom st(3)+ l5 u8 }: |' R. j' @
1002884E |. |DFE0 |fstsw ax
7 G% c. `4 \5 O# q9 l) H10028850 |. |F6C4 05 |test ah,5
& R+ k- Z7 i9 G7 g5 \10028853 |. |7A 04 |jpe short xcEngine.10028859- t8 z" z. {- X+ Y) S7 k+ C( a/ Z
10028855 |. |DDD9 |fstp st(1)3 \ k3 P7 _# `7 L- m/ m
10028857 |. |EB 0B |jmp short xcEngine.10028864
1 ]% V$ {8 {' u9 S0 z10028859 |> |D9C9 |fxch st(1)4 o, y6 w2 S3 T( ~+ L, T
1002885B |. |D8DC |fcomp st(4)% x% {0 l( d/ L! _
1002885D |. |DFE0 |fstsw ax
7 G- u4 @( M, O6 E% v* O' b3 J6 l1002885F |. |F6C4 41 |test ah,41
. ~5 V i4 p$ ]5 w* z10028862 |. |75 05 |jnz short xcEngine.100288690 x! I; K. R# X7 W9 V" p
10028864 |> |B9 01000000 |mov ecx,1
# U( k+ u4 T. o6 J& t/ y# F3 s10028869 |> |85C9 |test ecx,ecx
. k' P2 L- h. w1 K( B! d1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
& P9 J* n5 p" U% i# H$ p9 i1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
8 y3 t( p2 v! L2 D3 k, Y* P+ |: s10028872 |. |DECA |fmulp st(2),st$ V. `1 @0 y/ U7 m6 z& u
10028874 |. |DEC1 |faddp st(1),st
5 K5 [/ c8 v; s! o10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]! c6 l; s! N! O& |' o
1002887A |. |75 05 |jnz short xcEngine.10028881/ n6 E' V. P8 {' h" Z' d
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
( w7 \" F3 h# k; G8 U6 ^2 f10028881 |> |83C2 02 |add edx,2+ K6 p. M5 b: @' L/ v
10028884 |. |83EF 01 |sub edi,1
: A( h( H3 D) P$ c10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.100288077 K" h4 D6 i0 }' @9 q) Z
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |