写屏函数:
% W& O. D$ L/ }0 ]! b02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]7 M6 W; g8 a3 K( d
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码. s: w8 ~' C! r' @: O3 Y
02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]4 @7 J) K) t- B% C' V5 h
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
" }8 i7 z+ ]$ Y( d, {1 o02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]5 ]" i2 b; V/ @0 N9 b9 x
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表- {) S3 Y/ o8 M
每个字符码表占24(16进制)个字节
& V9 W) n G' U; [& p0 S( k02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]. p# N8 A4 o8 ?+ ?% o: }7 S/ }
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
# J$ \2 Q: x7 K% O s5 g' [02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]+ ?/ e2 H1 ]* U- P, B! O5 Y
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
" O8 ^! G. u A& G. h l. Z02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]7 W' M: M( S7 I$ s' y6 M: H. d& `
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]3 o* l; j( \' R/ Y8 g
02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址) ]) f: P% h9 G! Z6 e
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志
) T3 Z3 d$ H) ~% |02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]4 y$ w, u3 W, p- V
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
7 r9 v; A6 p1 _$ |/ ~% N7 s02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
+ e: e) r+ H$ [+ D$ S. K02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]; T- k- u/ K6 Z
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
g, h! a9 }( Q# L- ^3 r02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
2 w) y, V( S; F( K) A; M, l02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
; b! H( @. y2 a1 p$ e02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
9 v. V( H* L, t" d o4 B+ F3 c! `02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
# E" U i- W% J1 O02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]6 j! m4 ~$ g I) E% ^8 H
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]! I3 S+ m! }3 {6 t9 N9 M$ y
02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
( `3 X; J# K* C$ ?# A/ v02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]
4 t" t) u6 s. T# t1 f" E02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]& N: u% \2 p) y
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]/ I9 ^: v* D+ q8 _! o7 D
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]
) {9 I4 s* G p3 C3 ~02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]( J' i) L+ r, U' L( p# u8 I9 q+ a$ E
02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]) ]7 ~, C- {5 B. P1 u
02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]! |( L) c5 |" X
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]5 S; l2 W* w5 h5 F+ q! y2 w- Z l9 U
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]; C: {- Q( ^4 ?+ N! i
02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]! e) R- \5 r+ O$ N1 U, w
02A0EAC0 |. |83C1 70 ||add ecx,70
" s! ]1 N3 J) J+ D& g/ U02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
, E" ]* ?$ l' }3 O' r6 W' l02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
/ ]2 ?' T9 d7 _ P: X02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
3 ~% I: q1 H3 I8 l p- Z2 Z g02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]+ n" Z# d4 B7 ?) B: W' U, s9 N3 Z6 r
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]
7 g, y d& N% q2 V+ f02A0EAD2 |. |03C3 ||add eax,ebx
% s, }) D8 @# F5 y02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]& a# {7 H2 g; @( O p
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C$ ~! K" N9 ?% e
8 q5 t" M2 q4 P; D4 n' T% j
本游戏字符编码采用UNICODE,
: |4 m h# x0 m& U* I0 A对字符码表的操作:! x- }. I; C; S* B3 o
10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
" r" U5 n0 q2 g4 v7 ~. I1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]' \+ [$ e# i: I" x
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
7 J4 I. N* v' B6 }3 `10028810 |. |33C9 |xor ecx,ecx
! N/ x/ f" u% J) A Q! l, X10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]1 J0 T+ a9 f4 @1 \7 p! o
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]
1 f* x, u( ]4 @# U/ c10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
8 E7 l) }+ ^( C. b7 J1002881D |. |D9C0 |fld st
* u. u6 C$ a3 L: ~1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
1 e6 K, Y6 C! j/ B10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]
/ h1 f) {' U( J9 g4 H. J O10028826 |. |D9C0 |fld st) j V$ {9 L+ h, O7 z/ J4 h( `
10028828 |. |DEC2 |faddp st(2),st
3 ^/ B/ ^# Y4 H2 f; y1002882A |. |D9C9 |fxch st(1)
0 F+ ~9 @% H: Y& O4 S1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]$ D7 `2 Y& ~& u, _" K- x, A( J
10028830 |. |D8D3 |fcom st(3)
% s) [7 S* Z7 k4 r8 [10028832 |. |DFE0 |fstsw ax
5 F+ l3 g) A. I: N) r4 |10028834 |. |F6C4 01 |test ah,1
) ~4 j/ ^! E2 ~3 H& N2 E10028837 |. |74 2B |je short xcEngine.10028864% @4 w( y9 C1 K1 A' O1 [
10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]
2 \: t% G7 `* a4 k1002883D |. |D8D3 |fcom st(3): x. c1 e; f) _' k6 Z8 n0 ?
1002883F |. |DFE0 |fstsw ax
$ e7 A& B1 j0 r; _10028841 |. |F6C4 41 |test ah,41
3 Y0 \3 u. C, v) z4 B' `10028844 |. |7A 04 |jpe short xcEngine.1002884A8 |" T, C+ h/ r6 h( U& i3 F' l
10028846 |. |DDD8 |fstp st5 X( ~. Z* R7 a7 m5 [6 G4 y
10028848 |. |EB 1A |jmp short xcEngine.10028864( t1 c( `! F# @" e
1002884A |> |D9C9 |fxch st(1). [( d. f+ V( G" D# `6 c w
1002884C |. |D8D3 |fcom st(3)
) `. O0 A1 O/ }0 G6 G4 v1002884E |. |DFE0 |fstsw ax
- Y' U4 d" J; u) q10028850 |. |F6C4 05 |test ah,5
$ K+ ~% ]1 R' |8 L4 S+ @10028853 |. |7A 04 |jpe short xcEngine.10028859
( D% T5 p8 P& D7 E) {10028855 |. |DDD9 |fstp st(1)
3 o9 o7 x" O) u& O0 l7 N- }10028857 |. |EB 0B |jmp short xcEngine.100288642 C) n1 C' }) x4 r3 h9 ~0 h" e# |
10028859 |> |D9C9 |fxch st(1)
. i2 |5 q9 Q/ `0 M1002885B |. |D8DC |fcomp st(4)
; m- z- U. K9 h+ r7 e% Y' [: [) F1002885D |. |DFE0 |fstsw ax: B, @2 r: R& e0 F( J7 v
1002885F |. |F6C4 41 |test ah,41
9 m9 v' L3 {. f- d' ^. U10028862 |. |75 05 |jnz short xcEngine.10028869
" w2 D: ?6 ~% A! \5 c5 P3 A5 c10028864 |> |B9 01000000 |mov ecx,1' C- Z E. @: i7 d# @% L
10028869 |> |85C9 |test ecx,ecx6 n5 t( ?6 G p2 X: N8 _
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
: M5 [% t# j6 g5 t( Y3 v1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
, D. _. F, J& W- A8 ?4 ?( J9 l10028872 |. |DECA |fmulp st(2),st
. x V. a0 J% l+ m7 Q! y10028874 |. |DEC1 |faddp st(1),st
; ]/ n- n7 V6 @" Y+ E: ]10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]9 _* M8 _2 O3 G! ^9 R
1002887A |. |75 05 |jnz short xcEngine.10028881* c2 y! J0 s" p. v1 I
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],13 ~; G/ H. t. e; ~; c# d+ E
10028881 |> |83C2 02 |add edx,2
3 v' N! Z/ `' E8 @. h' D10028884 |. |83EF 01 |sub edi,1
0 k. R+ z2 w0 O& O4 g* j10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
% v9 i6 ^. K/ f$ Q% b由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |