冒险解谜游戏中文网 ChinaAVG

标题: 英雄无敌四读字库函数分析 [打印本页]

作者: jinxin8866    时间: 2010-3-16 20:33
标题: 英雄无敌四读字库函数分析
参数表
8 D% o! ^7 W, b& X4 Aarg1:[arg1+10]+[arg1+C]*arg3+arg2*2存放缓冲区(应该就是屏幕显示区在内存的映像)基地址
) E. W0 l) |+ `3 @- v( {, Iarg2:字符串宽度 x
5 Q8 o- b+ M! ?0 C9 Iarg3:y
. N' f9 P9 c( Q8 e2 D2 \arg4:颜色3 E) V' o# j% X# S, z
arg5:与颜色深度有关
( a1 x5 w3 a/ `3 E4 barg6:与颜色深度有关
, w2 ^* q) n8 N, Z4 Zecx:字符的编码基地址
5 \# a, Z9 x. w# n& ^! _
! I4 u( t+ ?& i2 B0071B820  /$  83EC 54               sub esp,54
0 X6 |6 @  O5 }6 S- y0071B823  |.  53                    push ebx0 X# J  T1 R+ g' J
0071B824  |.  8B5C24 5C             mov ebx,dword ptr ss:[esp+5C]2 H% m' [) m2 ?' X' W7 ]
0071B828  |.  55                    push ebp
) m2 f: i8 I3 n9 ~" k0071B829  |.  56                    push esi
! F7 B; G0 j& r/ G5 i$ L4 p/ `0071B82A  |.  8B43 08               mov eax,dword ptr ds:[ebx+8]
, [" W5 K9 [$ x! q8 \& o0071B82D  |.  8BF1                  mov esi,ecx
6 r# s/ H, a& _+ {$ u0071B82F  |.  8B4B 04               mov ecx,dword ptr ds:[ebx+4]
. C' r' a0 B- V: u* A7 W- I1 {6 h$ s0071B832  |.  57                    push edi
$ @/ {) b3 O3 o" Y* {0071B833  |.  50                    push eax# q" E5 l, e$ m: T/ I
0071B834  |.  51                    push ecx. F% L- \4 c4 Y( N
0071B835  |.  6A 00                 push 0
- {' F+ t& p9 `- Y( t6 p9 h0071B837  |.  6A 00                 push 0+ w; V# j0 _; I% C7 Y! [( U; M
0071B839  |.  8D4C24 54             lea ecx,dword ptr ss:[esp+54]
( y$ {4 N7 U( C. p/ B' P+ H' W* @: {0071B83D  |.  897424 20             mov dword ptr ss:[esp+20],esi+ W7 n4 p/ c* f! g) u! U6 ]4 Z
0071B841  |.  E8 6ABCCEFF           call heroes4.004074B0
9 m' L" _/ m/ x) k2 y7 E; B0071B846  |.  8B56 08               mov edx,dword ptr ds:[esi+8]
' f3 b& Q' k- d$ o0071B849  |.  8B46 04               mov eax,dword ptr ds:[esi+4]
9 E5 k1 u, I, C0 U' A' [0071B84C  |.  52                    push edx- a( K& G% t" J+ ]
0071B84D  |.  50                    push eax
( g: P1 X# T4 M) x0071B84E  |.  6A 00                 push 0
& P$ v3 k( P2 @7 K& D9 Z1 [* Y0071B850  |.  6A 00                 push 0
" M7 u% @0 K5 \$ g) W7 Q0071B852  |.  8D4C24 44             lea ecx,dword ptr ss:[esp+44]+ K1 ]& Y) S) M7 [
0071B856  |.  E8 55BCCEFF           call heroes4.004074B0) b  N. c7 Y+ P( L
0071B85B  |.  8B4C24 34             mov ecx,dword ptr ss:[esp+34]
  \# f1 U- q8 U3 c! [! B0071B85F  |.  8B5424 38             mov edx,dword ptr ss:[esp+38]
" m0 P! y6 S1 s6 q  Y. b0071B863  |.  8B4424 3C             mov eax,dword ptr ss:[esp+3C]
- i0 a: q2 Z; Q  j. ^0071B867  |.  894C24 24             mov dword ptr ss:[esp+24],ecx
+ m  Y7 X2 K1 K% K. x+ q, I( C0071B86B  |.  8B4C24 40             mov ecx,dword ptr ss:[esp+40]
0 m5 N  t* S( ?! }# i; ~) N( F* s/ X0071B86F  |.  895424 28             mov dword ptr ss:[esp+28],edx: ^2 P1 f) v  s& i: V. |
0071B873  |.  8D5424 6C             lea edx,dword ptr ss:[esp+6C]
% [. m5 L9 }2 u  k7 y. a5 I0071B877  |.  894C24 30             mov dword ptr ss:[esp+30],ecx" N0 B9 j. t6 ~, Z$ ?. \
0071B87B  |.  52                    push edx; c3 ^: I3 \; C; \4 L! W
0071B87C  |.  8D4C24 28             lea ecx,dword ptr ss:[esp+28]
2 g( @$ Y8 r, R( B& J7 K( U0071B880  |.  894424 30             mov dword ptr ss:[esp+30],eax
, U/ U+ X9 d# X  |' B0071B884  |.  E8 47BCCEFF           call heroes4.004074D0
* Q# v: X" K0 A. B9 a8 g0071B889  |.  8B4424 30             mov eax,dword ptr ss:[esp+30]/ a3 V- r) U: ~2 F1 L1 q
0071B88D  |.  8B4C24 50             mov ecx,dword ptr ss:[esp+50]
5 s* F+ l9 r* K! f0071B891  |.  3BC1                  cmp eax,ecx2 D$ d$ P; W4 O3 N' V
0071B893  |.  8BF8                  mov edi,eax
6 q% u1 S3 i, h. _0071B895  |.  7C 02                 jl short heroes4.0071B899
% Q! C/ H, y+ J9 M$ w0071B897  |.  8BF9                  mov edi,ecx
1 ?& \- P6 F$ I+ q5 ~4 G& h0071B899  |>  8B4424 2C             mov eax,dword ptr ss:[esp+2C]
  W+ w) Q; [4 i; A" k/ T: S0 b0071B89D  |.  8B5424 4C             mov edx,dword ptr ss:[esp+4C]4 H0 L5 W$ E! B& o. ?' R, d) |
0071B8A1  |.  3BC2                  cmp eax,edx3 R; k' ?' i. _5 h% j
0071B8A3  |.  7D 02                 jge short heroes4.0071B8A7
0 e' v+ B2 r7 g% b6 E0071B8A5  |.  8BD0                  mov edx,eax; h' L* W+ v) Z+ ?; X) B
0071B8A7  |>  8B4424 28             mov eax,dword ptr ss:[esp+28]
& B. Z6 E/ H$ ^2 K' w3 ]0 p" _0071B8AB  |.  8B4C24 48             mov ecx,dword ptr ss:[esp+48]/ f- L5 `3 ?2 M- N; _4 F
0071B8AF  |.  3BC1                  cmp eax,ecx
. i) A( d: Z; W) `8 I0071B8B1  |.  7E 02                 jle short heroes4.0071B8B5+ |: S$ W8 c  p$ s; |
0071B8B3  |.  8BC8                  mov ecx,eax" s& f- U% ?. Y. ?9 W
0071B8B5  |>  8B4424 24             mov eax,dword ptr ss:[esp+24]) A; Q$ @4 e3 C" I* u$ H3 u
0071B8B9  |.  8B7424 44             mov esi,dword ptr ss:[esp+44]* M9 m5 \+ K' ~
0071B8BD  |.  3BC6                  cmp eax,esi9 ~: r$ n) S1 g( U
0071B8BF  |.  7F 02                 jg short heroes4.0071B8C3$ J: B& q" \" M% R
0071B8C1  |.  8BC6                  mov eax,esi, i) W# L6 c9 j4 X7 G/ X( V+ |
0071B8C3  |>  57                    push edi
+ E+ X0 V) z' B  z0071B8C4  |.  52                    push edx
+ w+ b' T( _! W/ ?# {0071B8C5  |.  51                    push ecx/ ~  R  q8 j: \1 v' W! Q2 U8 J- l
0071B8C6  |.  50                    push eax1 W5 s3 J3 x% h5 k7 n9 A- {
0071B8C7  |.  8D4C24 64             lea ecx,dword ptr ss:[esp+64]6 D& d, k: K4 \
0071B8CB  |.  E8 E0BBCEFF           call heroes4.004074B05 ?. @9 l5 X! H% F: ~/ ?% \: G
0071B8D0  |.  8B4424 60             mov eax,dword ptr ss:[esp+60]+ a1 f( B  I) a
0071B8D4  |.  8B7424 58             mov esi,dword ptr ss:[esp+58]
4 \/ o' U1 Z9 Y. q% }+ w6 M0071B8D8  |.  2BC6                  sub eax,esi
6 l% E# ]: v, |  L; u9 T6 E0071B8DA  |.  85C0                  test eax,eax7 K2 o# j0 }! X- n$ u' K
0071B8DC  |.  894424 18             mov dword ptr ss:[esp+18],eax
" f6 W2 v1 p" Z0071B8E0  |.  0F8E B0010000         jle heroes4.0071BA96" K% K9 }8 O0 a- Z
0071B8E6  |.  8B6C24 5C             mov ebp,dword ptr ss:[esp+5C]) I( W- \: v  J; P- h) k) c
0071B8EA  |.  8B4C24 54             mov ecx,dword ptr ss:[esp+54]     ;  数值上等于arg2
8 j- Y- }- p4 \: J% s/ ?0071B8EE  |.  2BE9                  sub ebp,ecx
+ Y. ^* x! r# A  p. f/ @+ k0 ]0071B8F0  |.  85ED                  test ebp,ebp
* T+ w6 V2 u! W, v0 o: ~+ f0071B8F2  |.  896C24 1C             mov dword ptr ss:[esp+1C],ebp) R7 N, m8 h( {# J! [( C
0071B8F6  |.  0F8E 9A010000         jle heroes4.0071BA96* \! x3 `8 C: E
0071B8FC  |.  8B4424 6C             mov eax,dword ptr ss:[esp+6C]     ;  arg2
2 i" [  L, g4 Q# l# l7 ^0071B900  |.  8BF9                  mov edi,ecx+ H0 ]2 m" W  Q# M) |( B7 h
0071B902  |.  2BF8                  sub edi,eax; D2 H7 Y, ?' ]5 N
0071B904  |.  8B4424 70             mov eax,dword ptr ss:[esp+70]     ;  arg34 l0 V9 O: I1 Y* X- z
0071B908  |.  8BD6                  mov edx,esi
6 V3 z( h5 `) r" `- [0071B90A  |.  894C24 24             mov dword ptr ss:[esp+24],ecx$ ^  o) n2 f/ h$ `- W
0071B90E  |.  2BD0                  sub edx,eax; i  v! O% L. q% k$ L
0071B910  |.  8B43 0C               mov eax,dword ptr ds:[ebx+C]: y! D) i* S8 ^8 B& Q( S7 x6 @
0071B913  |.  8BD8                  mov ebx,eax
" ?4 ?# |0 N# B0071B915  |.  0FAFDE                imul ebx,esi6 j; Y2 ?6 n$ H& o, c
0071B918  |.  8D344B                lea esi,dword ptr ds:[ebx+ecx*2]+ X. s% g( t% K. `3 }
0071B91B  |.  8B4C24 68             mov ecx,dword ptr ss:[esp+68]
9 a% \/ }% P2 @3 L. y% f2 x' J$ S0 h6 k0071B91F  |.  8B59 10               mov ebx,dword ptr ds:[ecx+10]
0 ^) u7 Q$ y' j0071B922  |.  8B4C24 10             mov ecx,dword ptr ss:[esp+10]
$ {8 Y' ]  {$ J% j  y" I7 \5 W0071B926  |.  03F3                  add esi,ebx- p& l% ~( g; j# f/ l* g
0071B928  |.  8B49 0C               mov ecx,dword ptr ds:[ecx+C]0 e5 {- P+ g, `, C6 G! J
0071B92B  |.  897424 68             mov dword ptr ss:[esp+68],esi;  重点:将缓冲区地址写入栈内(原arg1处). X, d6 R# D+ W4 g' U: q
0071B92F  |.  8BD9                  mov ebx,ecx* b$ [* j& _2 u4 a; M! |
0071B931  |.  2BCD                  sub ecx,ebp' S" l4 Q3 o  ~
0071B933  |.  0FAFDA                imul ebx,edx  I4 A- ?( N5 k3 e2 b
0071B936  |.  8B5424 10             mov edx,dword ptr ss:[esp+10]8 x6 I3 I8 G' o+ p0 v$ J
0071B93A  |.  894C24 20             mov dword ptr ss:[esp+20],ecx/ r! [" l/ T/ e7 }* J
0071B93E  |.  8D4C2D 00             lea ecx,dword ptr ss:[ebp+ebp]- J" V' Z/ r8 i! r1 D
0071B942  |.  035A 10               add ebx,dword ptr ds:[edx+10]4 J& ?+ k: k$ |" a0 l
0071B945  |.  8B5424 18             mov edx,dword ptr ss:[esp+18]  d2 v5 ]8 n) {2 g' B. G/ X) s
0071B949  |.  2BC1                  sub eax,ecx
" j- d0 k+ |- z0071B94B  |.  894424 24             mov dword ptr ss:[esp+24],eax1 C: K% s* N. v( t3 a2 ?: r
0071B94F  |.  03DF                  add ebx,edi0 {* t9 X# F0 Y' P! H/ `
0071B951  |.  8BC2                  mov eax,edx
0 ^# G; j8 r9 V2 v. a2 s# I0071B953  |.  4A                    dec edx
5 ~3 |$ v- O3 U& L0071B954  |.  85C0                  test eax,eax
2 w. V6 ~2 G% E' j6 }0071B956  |.  0F84 3A010000         je heroes4.0071BA96% W( E3 O6 e( w7 a
0071B95C  |.  42                    inc edx
2 D8 Y% [: D1 G" N2 r) e: D% W1 L2 i8 w0071B95D  |.  895424 18             mov dword ptr ss:[esp+18],edx' M' `7 P( \# B, u
0071B961  |>  85ED                  /test ebp,ebp
# j% e& C. r/ d3 e5 S8 k0071B963  |.  0F84 0E010000         |je heroes4.0071BA77
8 f7 j* M7 M6 b" F: F0071B969  |.  8B4424 74             |mov eax,dword ptr ss:[esp+74]
8 a7 G4 W( \4 `" G* x0 @- [0071B96D  |.  896C24 14             |mov dword ptr ss:[esp+14],ebp
/ P# _# n2 c7 B( ]5 W6 n8 ~' y+ Q0071B971  |.  25 FFFF0000           |and eax,0FFFF1 _2 C! o5 Q8 c3 m) O
0071B976  |.  894424 10             |mov dword ptr ss:[esp+10],eax" e( O: S. l7 c2 e/ ~
0071B97A  |>  8A4424 78             |/mov al,byte ptr ss:[esp+78]# @8 n; P+ F( v( ?1 a1 s# i+ `; T
0071B97E  |.  8B2D DCF0AA00         ||mov ebp,dword ptr ds:[AAF0DC]! Q' a; K7 m8 T1 k2 B( k# t
0071B984  |.  84C0                  ||test al,al  |$ [% g+ G) X+ F6 f, h
0071B986  |.  74 6A                 ||je short heroes4.0071B9F2
, z3 u0 j( B" @0071B988  |.  8A0B                  ||mov cl,byte ptr ds:[ebx]        ;  取字模的像素点! E' y- ]- m/ ~5 o" D) z, r% k" Q
0071B98A  |.  8B4424 7C             ||mov eax,dword ptr ss:[esp+7C]
- ~2 r# H1 s- @2 }% {0071B98E  |.  83E1 0F               ||and ecx,0F                      ;  取低四位& Y1 R& ]( {8 n
0071B991  |.  25 FFFF0000           ||and eax,0FFFF
, @. r5 b* P) g; {, E" S7 i( s0071B996  |.  8BF9                  ||mov edi,ecx
7 }& D( `3 M( Z# L. b3 T9 o0071B998  |.  33C9                  ||xor ecx,ecx) Z: w& t0 z: Q/ Z
0071B99A  |.  66:8B0E               ||mov cx,word ptr ds:[esi]        ;  取缓冲区的原值; ?# e, H' z6 ]8 W" |$ j1 ~; o
0071B99D  |.  85FF                  ||test edi,edi                    ;  检查字模的像素点低四位是否为0
/ {: g  n+ W3 B9 s3 Z# e0071B99F  |.  74 54                 ||je short heroes4.0071B9F5       ;  为0则不作处理
1 O" q& L8 X6 J& s0071B9A1  |.  8BD7                  ||mov edx,edi# d/ E' a: m! o; ]1 p: y. V% m) r
0071B9A3  |.  8BF1                  ||mov esi,ecx/ J/ T* u/ Q9 t
0071B9A5  |.  C1FA 03               ||sar edx,3) F, ~& M4 O1 r  k& F7 {1 r* h5 @
0071B9A8  |.  83E2 01               ||and edx,1
4 r: W  p) J% H' l0071B9AB  |.  03FA                  ||add edi,edx
, {9 N3 L3 a2 O4 u6 i# m( H0071B9AD  |.  8BD1                  ||mov edx,ecx
( F- N, x. l" s$ i8 D+ K0 ?0071B9AF  |.  8B0D 04F1AA00         ||mov ecx,dword ptr ds:[AAF104]
8 k8 c6 d! }0 ?, f/ g0071B9B5  |.  23D5                  ||and edx,ebp
' f0 S4 [' F8 |" I1 B2 s0071B9B7  |.  23F1                  ||and esi,ecx
1 m% {3 B5 s* S. l$ ^# {( ^0071B9B9  |.  8BC8                  ||mov ecx,eax4 H4 ?9 d$ _( Z$ K( Y
0071B9BB  |.  230D 04F1AA00         ||and ecx,dword ptr ds:[AAF104]$ c# z' S3 |, X' e; D4 \3 \5 H% q
0071B9C1  |.  23C5                  ||and eax,ebp3 @* E# W6 W6 R8 g
0071B9C3  |.  2BC2                  ||sub eax,edx+ H$ [7 J! V0 a2 U, T* [# W
0071B9C5  |.  2BCE                  ||sub ecx,esi: `- J: O1 f6 g. s
0071B9C7  |.  0FAFC7                ||imul eax,edi
* y" s' x! L: I$ p5 H0071B9CA  |.  0FAFCF                ||imul ecx,edi/ `1 S, z1 d7 I0 a" J" A4 K
0071B9CD  |.  C1E6 04               ||shl esi,4
, O% \+ A8 j; t+ p& ?0071B9D0  |.  03CE                  ||add ecx,esi5 F6 L& K, R* T1 k/ |& ^; Y
0071B9D2  |.  8B35 F4F0AA00         ||mov esi,dword ptr ds:[AAF0F4]/ o- e9 j- Z3 q7 Z" d
0071B9D8  |.  C1E2 04               ||shl edx,4* d9 p9 b0 x# Q5 M0 n
0071B9DB  |.  23CE                  ||and ecx,esi, F) T' u! J. S( Z+ ?
0071B9DD  |.  8B35 D8F0AA00         ||mov esi,dword ptr ds:[AAF0D8]# T4 Z+ C% N& _  ?8 z  i; W) M
0071B9E3  |.  03C2                  ||add eax,edx
8 Q+ g, g9 _. }/ m0071B9E5  |.  23C6                  ||and eax,esi
7 s7 Y' l0 E% {' }( b( A9 ~$ \0071B9E7  |.  8B7424 68             ||mov esi,dword ptr ss:[esp+68], v. v. I4 B5 y# v% k3 I
0071B9EB  |.  03C8                  ||add ecx,eax; i3 q$ N  J$ w- R& \, e
0071B9ED  |.  C1F9 04               ||sar ecx,4- c* b4 a3 z0 W( e# ^, @/ M
0071B9F0  |.  EB 03                 ||jmp short heroes4.0071B9F5; `" z! c/ f" J! [8 \
0071B9F2  |>  66:8B0E               ||mov cx,word ptr ds:[esi]! h) v. j' z8 c$ e( }8 H; F
0071B9F5  |>  33D2                  ||xor edx,edx# U5 i: D8 J2 a2 A2 j( G& g
0071B9F7  |.  81E1 FFFF0000         ||and ecx,0FFFF' \$ T* E7 b3 |4 Q! L+ {! o/ |
0071B9FD  |.  8A13                  ||mov dl,byte ptr ds:[ebx]
0 d' [% a1 ^/ Q$ P2 g% ]2 d- O0071B9FF  |.  8BC1                  ||mov eax,ecx( G3 ?( t; K; D2 V) ]+ B7 x
0071BA01  |.  C1EA 04               ||shr edx,4                       ;  取高四位& T9 p* n7 e: d& v9 u' w# J
0071BA04  |.  85D2                  ||test edx,edx                    ;  检查字模的像素点高四位是否为0
0 o% z* m$ u2 W( \5 G0 H0071BA06  |.  74 51                 ||je short heroes4.0071BA59       ;  为0则不作处理
) B, f# a( l7 Y8 y! G0071BA08  |.  8BCA                  ||mov ecx,edx
$ o: X5 V6 G8 x. |0071BA0A  |.  8BF0                  ||mov esi,eax
( f* ]( o3 k5 E& C' _2 c# y$ X, h0071BA0C  |.  C1F9 03               ||sar ecx,39 w7 H8 M" h5 f0 T! K8 }7 U( q
0071BA0F  |.  83E1 01               ||and ecx,1! `0 w/ B4 ]9 p) u5 l" d& j. {: b, a
0071BA12  |.  23F5                  ||and esi,ebp
+ c# Q' c5 b$ D" Y- |7 ~5 V0071BA14  |.  03D1                  ||add edx,ecx& R1 h; |& u  P
0071BA16  |.  8BC8                  ||mov ecx,eax( j' c: y! R; m5 t8 y* u
0071BA18  |.  8B4424 10             ||mov eax,dword ptr ss:[esp+10]
2 @+ e% a1 G; H; ?# O, o, ^0071BA1C  |.  8B3D 04F1AA00         ||mov edi,dword ptr ds:[AAF104]. T) k9 W$ T8 q7 Z/ Z
0071BA22  |.  23C5                  ||and eax,ebp! |  w& w) C  k) o
0071BA24  |.  23CF                  ||and ecx,edi
* I7 y, w- r' v0071BA26  |.  2BC6                  ||sub eax,esi
) u4 t. l. Z4 B. ^! J# g* F0 j0071BA28  |.  0FAFC2                ||imul eax,edx
: \$ U! N; J3 k& p0071BA2B  |.  C1E6 04               ||shl esi,4$ ^0 d  k& b- V( M$ ^
0071BA2E  |.  03C6                  ||add eax,esi1 _' @/ }. A  b1 k' M
0071BA30  |.  8B35 D8F0AA00         ||mov esi,dword ptr ds:[AAF0D8]# @( T4 {! x  R
0071BA36  |.  23C6                  ||and eax,esi5 X* u# j9 v  ~" G/ B
0071BA38  |.  8B7424 10             ||mov esi,dword ptr ss:[esp+10]
+ a! O1 X0 x8 o  F" K% G* K0071BA3C  |.  23F7                  ||and esi,edi0 y) V1 T& o/ V5 A
0071BA3E  |.  8B3D F4F0AA00         ||mov edi,dword ptr ds:[AAF0F4]. S% A. F) ^6 b' M$ H
0071BA44  |.  2BF1                  ||sub esi,ecx3 I$ s( l7 ?  N4 b# Z
0071BA46  |.  0FAFF2                ||imul esi,edx4 J% s$ B( e$ X- Y; v& }
0071BA49  |.  C1E1 04               ||shl ecx,49 X1 j; c4 \2 P, c6 D
0071BA4C  |.  03F1                  ||add esi,ecx
3 p# p; X0 r- D! `3 t0071BA4E  |.  23F7                  ||and esi,edi3 b6 }% Q; x) m
0071BA50  |.  03C6                  ||add eax,esi
  h% L7 b% \( S' a6 p; w; k0071BA52  |.  8B7424 68             ||mov esi,dword ptr ss:[esp+68]
/ L4 [; i! F, D3 v: p5 w8 G& ?4 n0071BA56  |.  C1F8 04               ||sar eax,40 f  m7 M# `4 [3 e8 y  J! f
0071BA59  |>  66:8906               ||mov word ptr ds:[esi],ax        ;  将经过处理后的缓冲区值放回原处
6 g# F  C; s3 Z/ d7 d0071BA5C  |.  8B4424 14             ||mov eax,dword ptr ss:[esp+14]
3 M- c" ^- @# ~/ l0071BA60  |.  43                    ||inc ebx                         ;  指向字模的下个像素点/ e+ v' L7 V: E# x! L6 D
0071BA61  |.  83C6 02               ||add esi,2                       ;  指向缓冲区的下个点
7 r+ @6 n* Z/ A  i3 d3 n7 m0071BA64  |.  48                    ||dec eax                         ;  计数值减19 _: ]# x% K6 b( t, T
0071BA65  |.  897424 68             ||mov dword ptr ss:[esp+68],esi. \: H: s  U' ~, i7 `
0071BA69  |.  894424 14             ||mov dword ptr ss:[esp+14],eax3 F9 N6 l, Y5 \) `, y! @/ S
0071BA6D  |.^ 0F85 07FFFFFF         |\jnz heroes4.0071B97A
9 [$ g6 W$ u; f$ [- ?0 D! a0071BA73  |.  8B6C24 1C             |mov ebp,dword ptr ss:[esp+1C]
. p  v5 Z2 b7 A: A2 G0071BA77  |>  8B5424 20             |mov edx,dword ptr ss:[esp+20]
' k" F+ y; ]6 f# Z3 u: w8 `1 L0071BA7B  |.  8B4C24 24             |mov ecx,dword ptr ss:[esp+24]
, V* k5 @' K2 z0 S# f+ J6 a9 N9 d0071BA7F  |.  8B4424 18             |mov eax,dword ptr ss:[esp+18]9 ]! U+ {& K. x/ N
0071BA83  |.  03DA                  |add ebx,edx                      ;  指向字模的下行像素点2 G4 k" e0 S$ Y, D! m
0071BA85  |.  03F1                  |add esi,ecx                      ;  指向缓冲区的下行点
8 F3 I8 b. C* m+ @" n8 i& m0071BA87  |.  48                    |dec eax                          ;  计数值减1; a- v" {( p0 r  F
0071BA88  |.  897424 68             |mov dword ptr ss:[esp+68],esi
. F4 A( N- C" d3 M8 q+ d: C0071BA8C  |.  894424 18             |mov dword ptr ss:[esp+18],eax
( _; L( v. a: p4 G" c2 e. x. x0071BA90  |.^ 0F85 CBFEFFFF         \jnz heroes4.0071B961' I8 j6 A% x( G8 Y8 z# K
0071BA96  |>  5F                    pop edi' |9 H: Y0 s0 D# o& N6 f2 T' y: [
0071BA97  |.  5E                    pop esi- h6 [5 X9 t# j+ z. A& B! k" x% h- r. `
0071BA98  |.  5D                    pop ebp
; K! _' u8 v/ s) z4 O: A0071BA99  |.  5B                    pop ebx" ]) P% ?4 H; s
0071BA9A  |.  83C4 54               add esp,54: z; n. Y, N3 K$ S7 ?* j& f* k& G
0071BA9D  \.  C2 1800               retn 18% Z- A  N: O  l9 C  Z( T4 p3 F3 o
本函数的核心是两层循环,从71B9A1开始就是循环体,整个换算过程是一个比较复杂的算法,可以简单表示为:
5 @9 W9 {! P! H  M4 R/ `% g3 R
0 N& E5 q2 a- N1 ]& kbuf[x][y]=func(buf[x][y],zm[x/2][y/2]); d% U+ J* E; i  Z- ]) p$ l
( X: n9 H8 r, I" f' z( b
buf:缓冲区二维数组,两个字节表示一个点& z! r- l0 f% R% ~) N; \. ~
zm:字模二维数组,一个字节表示一个点
作者: shane007    时间: 2010-3-16 21:37
建议楼主可以内挂一个DLL代替原来的函数。疯人院就是这么搞的.
6 j, r- x; n1 ^9 t, U- m( F6 d1 {# N, I) y. L
对了,这个游戏是直接写显存的?
- }% s0 M* Z: }  G不是写directx的surface?
作者: shane007    时间: 2010-3-16 21:45
对了,我想问一下楼主,你是不是对这个游戏很感兴趣?还是只是想研究汉化技术呢?
作者: jinxin8866    时间: 2010-3-17 18:11
两方面都有!
作者: shane007    时间: 2010-3-17 22:30
引用第3楼jinxin8866于2010-03-17 18:11发表的  :
# Z# U; n2 X5 K1 d两方面都有!

& R% J( O5 ?: Z论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
& S" H' i2 Y) S3 P3 ^% t目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
作者: shane007    时间: 2010-3-17 22:31
[quote]引用第4楼shane007于2010-03-17 22:30发表的 : 6 _+ L5 l2 ?* r$ [: P
  ~3 h  m% G* v& j; j
( Q# A9 h3 H2 {* Q+ A
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。
* W5 I4 }" N. V$ C2 r3 z! H& L目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?' g; E$ I8 R! Z) u! h! s4 ~7 W
如果愿意的话也一定会让你有所收获的。
作者: jinxin8866    时间: 2010-3-18 03:21
可以啊,希望能帮上忙




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2