写屏函数:9 ~- b+ K5 T( P9 G I7 h8 ^* c
02A0EA4C |> /8B00 |/mov eax,dword ptr ds:[eax]/ |/ e" @! w8 ^' y" F7 s
02A0EA4E |. |0FB70450 ||movzx eax,word ptr ds:[eax+edx*2] ; [eax+edx*2]存放字符的UNICODE码
4 l+ O4 S9 y8 Q( W$ o7 W0 n02A0EA52 |. |8B7C24 14 ||mov edi,dword ptr ss:[esp+14]* e4 e6 c" k" }" w) c
02A0EA56 |. |8B7F 2C ||mov edi,dword ptr ds:[edi+2C]
9 Q; R, H$ \% q02A0EA59 |. |8D04C0 ||lea eax,dword ptr ds:[eax+eax*8]
/ O5 ^: e7 B8 Q1 O02A0EA5C |. |8D0487 ||lea eax,dword ptr ds:[edi+eax*4] ; eax存放字符编码表) p, [/ O2 `% `, V6 T; F
每个字符码表占24(16进制)个字节
# d0 K ^5 Q- g2 ]2 h$ @* p4 N02A0EA5F |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]8 z# ]/ N J. ]
02A0EA63 |. |8D7C39 14 ||lea edi,dword ptr ds:[ecx+edi+14] ; edi就是显存地址
( J0 a% s8 T% I5 r02A0EA67 |. |D940 04 ||fld dword ptr ds:[eax+4]3 \' d2 Q$ F J" X% Y; U" O
02A0EA6A |. |83C2 01 ||add edx,1 字符个数加一
5 \8 Q$ t3 \8 F2 A+ P02A0EA6D |. |D95C24 30 ||fstp dword ptr ss:[esp+30] F& t$ @: B4 g! P
02A0EA71 |. |D900 ||fld dword ptr ds:[eax]
6 J0 d( c0 j6 ?) K4 Z9 Y0 F# S02A0EA73 |. |D91F ||fstp dword ptr ds:[edi] ; edi就是显存地址( d6 E1 F& x6 D; g- V
每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志9 {& S4 p) ~# u7 m+ ?5 h$ u& U
02A0EA75 |. |D94424 30 ||fld dword ptr ss:[esp+30]- M: g2 ^6 C6 f% ^$ U
02A0EA79 |. |D95F 04 ||fstp dword ptr ds:[edi+4]
/ F- V) O/ k$ K02A0EA7C |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
' \% g3 x8 O4 n02A0EA80 |. |D940 04 ||fld dword ptr ds:[eax+4], X Z& _0 \* m% m& O9 v7 T
02A0EA83 |. |8D7C39 30 ||lea edi,dword ptr ds:[ecx+edi+30]
4 _0 `) M0 z& _* N& q02A0EA87 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]6 r) ]1 x4 v0 ?7 V: x$ k. S2 u
02A0EA8B |. |D940 08 ||fld dword ptr ds:[eax+8]5 w, S6 L# s5 Y$ F8 s
02A0EA8E |. |D91F ||fstp dword ptr ds:[edi]
& K$ z: `% n. m) _+ W02A0EA90 |. |D94424 30 ||fld dword ptr ss:[esp+30]
( w2 D& X0 J; H9 w0 y02A0EA94 |. |D95F 04 ||fstp dword ptr ds:[edi+4]- k) Z4 y/ @ M6 Q8 N
02A0EA97 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]
; R# n o( b$ z1 q02A0EA9B |. |D940 0C ||fld dword ptr ds:[eax+C]
% L, j! m! [' s02A0EA9E |. |8D7C39 4C ||lea edi,dword ptr ds:[ecx+edi+4C]
! V- n5 F9 }* z; N& y0 \02A0EAA2 |. |D95C24 30 ||fstp dword ptr ss:[esp+30]
3 `8 |4 R- F4 M! a, s3 f6 l02A0EAA6 |. |D900 ||fld dword ptr ds:[eax]2 J& e; q w" _: B
02A0EAA8 |. |D91F ||fstp dword ptr ds:[edi]
6 L6 g9 l/ x- H- k5 U* i/ R02A0EAAA |. |D94424 30 ||fld dword ptr ss:[esp+30]
- ? j ]/ W/ S: O. V02A0EAAE |. |D95F 04 ||fstp dword ptr ds:[edi+4]
8 B' [! T* N% s& }5 b8 P( r; n5 S02A0EAB1 |. |8B7C24 0C ||mov edi,dword ptr ss:[esp+C]2 N; H2 t5 D# A) f
02A0EAB5 |. |D940 0C ||fld dword ptr ds:[eax+C]9 U1 j; P* }3 Z2 J4 l" c
02A0EAB8 |. |8D7C39 68 ||lea edi,dword ptr ds:[ecx+edi+68]8 I1 d& o/ _+ p7 R+ d5 ?: C/ I
02A0EABC |. |D95C24 30 ||fstp dword ptr ss:[esp+30]4 K. l: h5 T- y3 O* h
02A0EAC0 |. |83C1 70 ||add ecx,70+ z& c, ?. Q7 k# T8 e" L
02A0EAC3 |. |D940 08 ||fld dword ptr ds:[eax+8]5 V/ l, a, c6 L
02A0EAC6 |. |D91F ||fstp dword ptr ds:[edi]
2 i8 U2 O3 w3 X8 r3 {02A0EAC8 |. |D94424 30 ||fld dword ptr ss:[esp+30]
8 D/ b+ ]4 I* c02A0EACC |. |D95F 04 ||fstp dword ptr ds:[edi+4]
4 }3 k3 x1 j0 E% v+ M) K02A0EACF |. |8B46 58 ||mov eax,dword ptr ds:[esi+58]7 B a+ Y# w+ X; R$ _8 n4 Z
02A0EAD2 |. |03C3 ||add eax,ebx
! Y4 }9 {" W+ x3 v02A0EAD4 |. |3B50 08 ||cmp edx,dword ptr ds:[eax+8]- D/ j% E' [" J
02A0EAD7 |.^\\0F8C 6FFFFF>|\\jl xcDxShad.02A0EA4C0 E/ }8 ]2 x) E, ^5 E# e
* j) f. l1 ]. j
本游戏字符编码采用UNICODE,9 z8 Z |0 _3 ~4 B. f. j6 b; ^
对字符码表的操作:
: |/ t0 M# k+ c L" c2 G! e7 V8 h10028807 |> /0FB702 /movzx eax,word ptr ds:[edx] 读字符的UNICODE码
7 d( H5 ^9 L2 d* b" U1002880A |. |8D04C0 |lea eax,dword ptr ds:[eax+eax*8]
e! k+ P) o0 u* x- N1002880D |. |8D0483 |lea eax,dword ptr ds:[ebx+eax*4] 根据UNICODE码求得字符码表的地址
$ v. h% K8 V! @0 c" `8 l10028810 |. |33C9 |xor ecx,ecx
$ E# E) p# p5 y9 {; {1 K10028812 |. |DB40 20 |fild dword ptr ds:[eax+20]) N' n- [4 l$ y5 ^
10028815 |. |D95C24 14 |fstp dword ptr ss:[esp+14]5 w# F0 T- b8 \9 A, q
10028819 |. |D94424 14 |fld dword ptr ss:[esp+14]
3 O0 [# k V0 I0 U, D1002881D |. |D9C0 |fld st
: X8 Y. D+ Z* R& Q+ N; d: n9 W: Y1002881F |. |D84E 14 |fmul dword ptr ds:[esi+14]7 ?" ]! @; l( l6 P: k u" _
10028822 |. |D94424 0C |fld dword ptr ss:[esp+C]; g' Y- K: [1 ?: J
10028826 |. |D9C0 |fld st
# l3 C2 z. a. o, a+ P' j10028828 |. |DEC2 |faddp st(2),st% r: g8 l$ W) E
1002882A |. |D9C9 |fxch st(1)
4 T, W- r1 S4 s6 g+ ~6 _# I1002882C |. |D95C24 14 |fstp dword ptr ss:[esp+14]: u2 ~; e4 L% P2 f# l: G
10028830 |. |D8D3 |fcom st(3)
8 R) x( f; r$ d9 H10028832 |. |DFE0 |fstsw ax
5 m: i; T8 h @/ A2 @* o# d10028834 |. |F6C4 01 |test ah,1
_+ z) r/ {3 W$ Q10028837 |. |74 2B |je short xcEngine.10028864
1 K, {* p: w+ a3 D9 a10028839 |. |D94424 14 |fld dword ptr ss:[esp+14]
( r* ^5 R" S3 _4 [1002883D |. |D8D3 |fcom st(3)
* y7 E( V: ]6 T6 D% `1002883F |. |DFE0 |fstsw ax* ?5 A! k( @: F3 k* r2 e
10028841 |. |F6C4 41 |test ah,413 F# b* b- t7 n- E% e
10028844 |. |7A 04 |jpe short xcEngine.1002884A& o0 D. U- U1 `+ h: |/ k
10028846 |. |DDD8 |fstp st
- Z: R) D1 {) R10028848 |. |EB 1A |jmp short xcEngine.100288642 _9 b2 S0 [7 e, R t Q+ Q- y4 A
1002884A |> |D9C9 |fxch st(1)- w7 J6 v; @9 [2 l" _: N
1002884C |. |D8D3 |fcom st(3)
& o$ n: `0 a: d5 @/ a3 H5 h1002884E |. |DFE0 |fstsw ax
; e3 N9 t4 g. T; x10028850 |. |F6C4 05 |test ah,5
! v# j1 u, F" s0 |5 \0 x10028853 |. |7A 04 |jpe short xcEngine.10028859
0 k+ H0 S6 J9 M" \10028855 |. |DDD9 |fstp st(1)9 s8 a" O4 |) W# F
10028857 |. |EB 0B |jmp short xcEngine.10028864
9 d& _- j7 A6 H2 O# }0 L10028859 |> |D9C9 |fxch st(1) p3 r4 G2 p, x4 i- C
1002885B |. |D8DC |fcomp st(4)
+ Z, H" {3 f( `+ f: ^9 R1002885D |. |DFE0 |fstsw ax ^) j: L% T. \* J5 J0 d) {
1002885F |. |F6C4 41 |test ah,414 U) q: C% G9 [& m
10028862 |. |75 05 |jnz short xcEngine.10028869
7 X- e3 g' |. J2 k6 F/ Z: u, O- \10028864 |> |B9 01000000 |mov ecx,1
' H. M a0 O( x( V10028869 |> |85C9 |test ecx,ecx1 P# V, O/ W- \
1002886B |. |8B4424 18 |mov eax,dword ptr ss:[esp+18]4 S K1 n/ I; p$ W. ]
1002886F |. |D940 14 |fld dword ptr ds:[eax+14]
5 v8 W6 u" M7 q9 @; I7 G- r10028872 |. |DECA |fmulp st(2),st& f5 q0 |, j ~+ d0 C5 V3 b* ?" W
10028874 |. |DEC1 |faddp st(1),st* C Q, b/ K% f$ H7 [9 Q/ X
10028876 |. |D95C24 0C |fstp dword ptr ss:[esp+C]: E8 I& u3 i0 G" b
1002887A |. |75 05 |jnz short xcEngine.10028881( I: }5 M: N# T5 Z/ r6 o
1002887C |. |834424 10 0>|add dword ptr ss:[esp+10],1
* D/ z S, x& r+ p10028881 |> |83C2 02 |add edx,2
9 b- R" \/ D4 @7 c' s10028884 |. |83EF 01 |sub edi,12 r, k' G1 K! W
10028887 |.^\\0F85 7AFFFF>\\jnz xcEngine.10028807
) M: Q( X7 v" W+ v. v由于算法采用了浮点数指令,本人不太懂,边学习边研究中。。。。。。。。。 |