写屏函数:
2 x, I5 p. X) q1 r" R/ A02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]
" T9 l9 I( J+ e; q2 k# n02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
. K( D. m& n. ?02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]- i Z( e* O( N4 ?. V. {! w9 f* v
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
, |5 h$ l. c" t' g02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]5 F7 I9 f1 Q: X, L4 v
02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表5 m2 M; L- H9 [* d0 V
每个字符码表占24(16进制)个字节
8 x) E, S+ A" I" k8 `; H8 F6 z02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
" W; |% E0 Z( B1 e. g02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
/ W% D0 G$ p3 @+ W* s1 S02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]
/ O2 s8 J& O2 w6 T7 ?02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
# S: ^; C- R" |6 V02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
; D% b$ |- S* k: S" W3 N/ V02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
[4 s( q7 [, s# c- H- ?' @& Z02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址
% p3 {7 P$ W3 K, o; O' @# h每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志9 ^) i1 r0 W9 u% c7 T$ W/ F! s, b
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]
/ H; ]: z+ K' B6 F+ x; e02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
& i% M2 Q' N3 A( T# l/ J- m02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]# x9 O! O1 V2 _) m) W1 |5 a! M
02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4]
0 S1 Y! S3 v6 `& Y02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
8 Y& i) i7 v9 j02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
- K+ h ]7 L. y4 `$ x& C6 L1 S/ z5 N02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]
2 x2 v1 [9 H* h3 O2 z02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]2 S' n }3 u0 p' t1 b' y' z
02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
0 D( i! E7 E* w" H% u& Q02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]1 |) w* i: C" \: A# }
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
8 q! Y) h* v. j) w5 J02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
4 r1 s9 B6 r" K4 S( ~02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]4 w" h# u- y2 m6 v
02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]: S0 ~" B3 g2 {( O
02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]
! S/ S; \& g8 t2 N9 J" t) H) l8 ]- ^02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]
6 ^/ Z2 I6 P2 [$ G; a1 u02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]. F2 x" V7 R8 t# [( q
02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]
1 S7 P* X$ u) e" c! A. x02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]% u$ W( Y' O/ _- L
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]. t6 b2 v$ o' W5 n6 p3 Q
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]# d. o. Y* B% b6 p
02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
7 n* C+ V' P8 n( L3 v ~& S02A0EAC0 |. |83C1 70 ||add ecx,70
: c! Y8 D% R9 i3 a: | q% O) O9 L' z02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]
+ j2 }' }5 v( H9 F' a) P02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
5 o2 t' k1 H7 A! B5 A' D. N) b7 F4 I7 x02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]. i+ ~2 L; D/ `0 x
02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]1 @( ~2 h2 d1 w+ F0 Z
02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]
7 Z* H- H: R0 T4 w- ]02A0EAD2 |. |03C3 ||add eax,ebx& c* y& Z2 _: N4 Q$ W" g
02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]/ v2 n: s9 \" p; D7 w5 M- Z
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C
3 X; P0 t1 t8 M" X# E
( N j# V. |5 W8 b! X1 s本游戏字符编码采用UNICODE," U4 c8 C1 `$ H$ d$ p- t1 E
对字符码表的操作:
; A2 W4 e# B3 O9 L10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
2 Z* \+ M9 j, k; g& ?" J# O1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]: m( U1 y% f$ t, P- C6 ^7 f
1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
( w8 @! l7 y* L10028810 |. |33C9 |xor ecx,ecx# m" G. g5 I% d, A- ^/ O5 i
10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]
! m3 ^8 U. {0 H) o2 ?10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]
" t6 i/ W W& k8 o" s* o7 Q) n; z10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]7 ~8 ]- `% x1 j' Z. Z) z+ o
1002881D |. |D9C0 |fld st Z" ~! u {5 m$ U5 a/ q9 w# i
1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]
. S* X5 t1 `0 X, y3 S' {' r10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]$ A" Z1 q8 ?% Q2 K0 O
10028826 |. |D9C0 |fld st" z) L. s& g5 B' d; e/ ^% o! I
10028828 |. |DEC2 |faddp st(2),st( [5 p j' {6 ` E
1002882A |. |D9C9 |fxch st(1)" x9 `) E* G. b
1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14] ?. t% z5 K# f" m* O1 ]9 n
10028830 |. |D8D3 |fcom st(3)
+ n* t* b* y9 [10028832 |. |DFE0 |fstsw ax
& o, ]' q% z# x: Q( |; V10028834 |. |F6C4 01 |test ah,1: A6 ~. I9 \. h1 o
10028837 |. |74 2B |je short xcEngine.10028864
3 G% o. r3 C8 I' M10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]
3 y+ Y5 e: @$ C+ ^( g4 v1 K1002883D |. |D8D3 |fcom st(3)
; ]( g0 s: B4 O' R- g' n1002883F |. |DFE0 |fstsw ax( Z: P! m& q, ^8 j+ L
10028841 |. |F6C4 41 |test ah,41. J# k# H% J- U. i7 y
10028844 |. |7A 04 |jpe short xcEngine.1002884A- }: ~8 |9 w( D' q$ }) S
10028846 |. |DDD8 |fstp st, L0 F4 Q" l/ ?/ I: J. U0 s
10028848 |. |EB 1A |jmp short xcEngine.10028864
4 @5 I& l+ b7 |: o# \1002884A |> |D9C9 |fxch st(1)& D8 N5 k: X9 F. Z9 J/ ~6 [1 @
1002884C |. |D8D3 |fcom st(3)3 a, f6 }3 v4 v, ^% e+ q2 c5 p: j
1002884E |. |DFE0 |fstsw ax5 P2 I3 q' n) `( j. J8 W
10028850 |. |F6C4 05 |test ah,58 f% R5 E, f7 M- e
10028853 |. |7A 04 |jpe short xcEngine.100288594 |+ g& W2 {$ E+ z- @9 j
10028855 |. |DDD9 |fstp st(1)
, o1 a$ d/ b! S10028857 |. |EB 0B |jmp short xcEngine.10028864& M( M6 m# C8 W: i Q- J& g( K
10028859 |> |D9C9 |fxch st(1)* B) q, F& P: i
1002885B |. |D8DC |fcomp st(4)" ~2 T% @: k- F9 L+ |$ B# v9 m
1002885D |. |DFE0 |fstsw ax/ T, F1 B9 Y5 m. a) ^/ |
1002885F |. |F6C4 41 |test ah,418 e+ X9 F* Y ^, {9 y s. p
10028862 |. |75 05 |jnz short xcEngine.10028869
' n: E( N$ D/ T3 Q T; { O10028864 |> |B9 01000000 |mov ecx,1& Q: ^1 n+ g8 v) \
10028869 |> |85C9 |test ecx,ecx
/ t) w ^9 Z+ P, G; J1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]
9 c9 T) q7 G; r8 k2 v9 R1002886F |. |D940 14 |fld dword ptr ds:[eax+14]: d4 S- J- N: ?$ g+ z0 U. O7 f
10028872 |. |DECA |fmulp st(2),st% _$ ~! c0 g. l
10028874 |. |DEC1 |faddp st(1),st+ A6 o5 [, a, m- {& Y
10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]
1 O, i3 N0 u4 H* ^3 X1002887A |. |75 05 |jnz short xcEngine.10028881" v4 h; V/ v3 `4 ]( A0 R1 }0 B) X
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
+ K2 h* Y: s/ U8 d+ Z8 H7 s) C10028881 |> |83C2 02 |add edx,2
* j+ u* D3 a" a3 b" L B( ]) V; l10028884 |. |83EF 01 |sub edi,1
+ F, C3 Q: W/ f5 @6 P+ a# W. P4 K+ x2 f( }10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807& J1 ?, L% {& S$ }3 b2 ?4 H, l
由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |