冒险解谜游戏中文网 ChinaAVG

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

作者: jinxin8866    时间: 2010-3-16 20:33
标题: 英雄无敌四读字库函数分析
参数表% |+ C7 J0 D! g2 x% r3 F7 B
arg1:[arg1+10]+[arg1+C]*arg3+arg2*2存放缓冲区(应该就是屏幕显示区在内存的映像)基地址! C0 G8 e7 `7 q9 i' b" u- Q
arg2:字符串宽度 x
+ J- ^& w' H3 _/ B6 j' c9 Xarg3:y
4 v( m' A+ [" \9 q) Z/ v3 R8 Warg4:颜色# x2 m( t4 j9 K! r7 t8 l
arg5:与颜色深度有关% E' C2 v& x8 Z% x
arg6:与颜色深度有关
# W: J/ o: D- n- `1 ~# Lecx:字符的编码基地址0 g; h% [2 ]# r' L3 p

7 R# a: a, i+ i  ?- s% g9 C' s0071B820  /$  83EC 54               sub esp,54
8 F! b2 _9 h6 _9 M5 A# x0071B823  |.  53                    push ebx
6 y0 }. J9 q$ o. Q5 x$ m' @0071B824  |.  8B5C24 5C             mov ebx,dword ptr ss:[esp+5C]& N3 F+ c! B4 p" t* X
0071B828  |.  55                    push ebp
. C7 U" [% y0 g0071B829  |.  56                    push esi2 S) D' F' b3 a- x9 e/ m9 O
0071B82A  |.  8B43 08               mov eax,dword ptr ds:[ebx+8]
& W' C* U+ n0 z0 y: X/ j% o0071B82D  |.  8BF1                  mov esi,ecx8 s$ ~! N# F6 X" g
0071B82F  |.  8B4B 04               mov ecx,dword ptr ds:[ebx+4]! N7 W6 Z6 Y- u& L+ u
0071B832  |.  57                    push edi
8 N3 c$ G3 _3 {. h5 Q0071B833  |.  50                    push eax. \! B, t* l. f  H( _
0071B834  |.  51                    push ecx" E% F! H! ]4 [- N& N8 r( i
0071B835  |.  6A 00                 push 0
  O5 [. k1 a0 z$ Q' U0 p, R0071B837  |.  6A 00                 push 0* M" Q; k: M$ [# f8 ?1 g
0071B839  |.  8D4C24 54             lea ecx,dword ptr ss:[esp+54]( K1 X/ s+ g/ m  Y8 b- F8 X- u
0071B83D  |.  897424 20             mov dword ptr ss:[esp+20],esi) H$ P( b* S4 P
0071B841  |.  E8 6ABCCEFF           call heroes4.004074B0+ H  q3 n  w, [, |6 @
0071B846  |.  8B56 08               mov edx,dword ptr ds:[esi+8]4 e4 ?& l. U# a: @* ~5 j
0071B849  |.  8B46 04               mov eax,dword ptr ds:[esi+4]
* S  k$ ]5 M5 ~" H2 h0071B84C  |.  52                    push edx
4 a( V; _5 A$ X; C3 U0071B84D  |.  50                    push eax+ V( E# W; @, I" R5 l/ H$ v
0071B84E  |.  6A 00                 push 08 z4 h# k: s& v+ r
0071B850  |.  6A 00                 push 0' x3 {  M' R3 o$ ?4 C6 s
0071B852  |.  8D4C24 44             lea ecx,dword ptr ss:[esp+44]! K" V5 Y: f% _7 w$ j6 {
0071B856  |.  E8 55BCCEFF           call heroes4.004074B0# |/ v+ W! |. ^
0071B85B  |.  8B4C24 34             mov ecx,dword ptr ss:[esp+34]
, ^8 p+ o  p' X" C0071B85F  |.  8B5424 38             mov edx,dword ptr ss:[esp+38]. a) h+ l' j+ |: c% k/ k3 _
0071B863  |.  8B4424 3C             mov eax,dword ptr ss:[esp+3C]$ b0 @0 k# M/ r( v6 D: s5 N  V9 y
0071B867  |.  894C24 24             mov dword ptr ss:[esp+24],ecx
+ Z- L! k+ E2 y! S  m; v0071B86B  |.  8B4C24 40             mov ecx,dword ptr ss:[esp+40]0 W# J. o! w- Q2 b2 m
0071B86F  |.  895424 28             mov dword ptr ss:[esp+28],edx
7 f+ U7 Z, `& `1 G6 E4 A* F: m0071B873  |.  8D5424 6C             lea edx,dword ptr ss:[esp+6C]# ^9 y9 G' S' A- R8 s
0071B877  |.  894C24 30             mov dword ptr ss:[esp+30],ecx
+ R" M; e% T! \/ |7 }- b0071B87B  |.  52                    push edx
: R3 O) i5 S3 _" O' k9 P0071B87C  |.  8D4C24 28             lea ecx,dword ptr ss:[esp+28]$ O5 a; {; S( b
0071B880  |.  894424 30             mov dword ptr ss:[esp+30],eax0 ?1 a9 P* W* b- a
0071B884  |.  E8 47BCCEFF           call heroes4.004074D0
3 _6 F) ?1 M" c- y8 U+ Z! O0071B889  |.  8B4424 30             mov eax,dword ptr ss:[esp+30]
! h, `, a5 @# |1 O6 C6 V, x0071B88D  |.  8B4C24 50             mov ecx,dword ptr ss:[esp+50]! v! c  X$ N4 S* U; t
0071B891  |.  3BC1                  cmp eax,ecx
7 w0 F2 Y! O' t$ P0071B893  |.  8BF8                  mov edi,eax
! W- \, \7 [/ h; r! S0071B895  |.  7C 02                 jl short heroes4.0071B899
! {! i8 ~5 }; n0071B897  |.  8BF9                  mov edi,ecx) B( {0 t- r: M" w& V: q; ?
0071B899  |>  8B4424 2C             mov eax,dword ptr ss:[esp+2C]$ {. _% O/ G1 T  v2 G' }1 z
0071B89D  |.  8B5424 4C             mov edx,dword ptr ss:[esp+4C]
8 L6 O* r/ H; ~( K) V4 M/ i0071B8A1  |.  3BC2                  cmp eax,edx$ W/ o+ @8 I9 S8 u, `$ g. {
0071B8A3  |.  7D 02                 jge short heroes4.0071B8A7* _6 {$ g* d& d# e
0071B8A5  |.  8BD0                  mov edx,eax$ X4 Q  {/ e3 O1 d
0071B8A7  |>  8B4424 28             mov eax,dword ptr ss:[esp+28]
8 A4 F$ i& D7 W3 p9 _0071B8AB  |.  8B4C24 48             mov ecx,dword ptr ss:[esp+48]3 }3 i, J- W/ a: S8 e  s
0071B8AF  |.  3BC1                  cmp eax,ecx
  h' h# N6 c7 y8 [% L8 y( _0071B8B1  |.  7E 02                 jle short heroes4.0071B8B5$ b- Y; r# ~9 i* N
0071B8B3  |.  8BC8                  mov ecx,eax
- \2 F9 N: c1 G& ^; C8 h0071B8B5  |>  8B4424 24             mov eax,dword ptr ss:[esp+24]5 S  b) j% B9 ]1 l% W8 F
0071B8B9  |.  8B7424 44             mov esi,dword ptr ss:[esp+44]
7 Q( @/ D) f% J% b0071B8BD  |.  3BC6                  cmp eax,esi
6 O3 S5 ^0 w9 O$ w7 h9 H8 z, `. K0071B8BF  |.  7F 02                 jg short heroes4.0071B8C3
7 @1 e  H) Z$ F# c* r, f0071B8C1  |.  8BC6                  mov eax,esi
3 D* z; ^2 C% I0071B8C3  |>  57                    push edi8 C7 F' y6 Q/ d) }, z+ _& S6 f* q# M
0071B8C4  |.  52                    push edx
$ W* S+ }+ f4 R6 Z3 O. ]5 a! Z. p0071B8C5  |.  51                    push ecx, C- Z& |; s! m* I( Q9 i  Y  }1 g3 [
0071B8C6  |.  50                    push eax, E0 d0 f! Y! E/ ^: k$ O
0071B8C7  |.  8D4C24 64             lea ecx,dword ptr ss:[esp+64]6 c, _. A( ?4 A& i  O1 W" H  _
0071B8CB  |.  E8 E0BBCEFF           call heroes4.004074B06 p6 e7 m- V( z  X
0071B8D0  |.  8B4424 60             mov eax,dword ptr ss:[esp+60]
8 `& W5 ^6 S0 R' a0071B8D4  |.  8B7424 58             mov esi,dword ptr ss:[esp+58]/ m. u. ^4 ~& W! h& ^. q( q2 G0 N
0071B8D8  |.  2BC6                  sub eax,esi
, N8 u( m, h% M% r! b' y0071B8DA  |.  85C0                  test eax,eax( B% a7 C6 j; P" Y: J* d% k- W( }
0071B8DC  |.  894424 18             mov dword ptr ss:[esp+18],eax) v* J) g# c0 q0 Q& X+ M# z8 ]
0071B8E0  |.  0F8E B0010000         jle heroes4.0071BA96! a0 l. U! X% I  T" B
0071B8E6  |.  8B6C24 5C             mov ebp,dword ptr ss:[esp+5C]* b4 S. C$ p; ~5 f( B) I
0071B8EA  |.  8B4C24 54             mov ecx,dword ptr ss:[esp+54]     ;  数值上等于arg2
) V  s: h/ S& H; K  N' b5 T  p; T0071B8EE  |.  2BE9                  sub ebp,ecx
& W8 o' P- H! D2 M- ^0071B8F0  |.  85ED                  test ebp,ebp
! w6 e: Z( ~8 [3 G/ x0071B8F2  |.  896C24 1C             mov dword ptr ss:[esp+1C],ebp
# i1 X; g$ E: @1 O- g! Z+ C! o0071B8F6  |.  0F8E 9A010000         jle heroes4.0071BA96
1 M5 D1 z1 ~# n/ S9 A& m0071B8FC  |.  8B4424 6C             mov eax,dword ptr ss:[esp+6C]     ;  arg23 N3 n, g* Z+ S
0071B900  |.  8BF9                  mov edi,ecx
+ Y9 @7 f. P/ |+ Y0071B902  |.  2BF8                  sub edi,eax/ s% T0 Y) y2 i
0071B904  |.  8B4424 70             mov eax,dword ptr ss:[esp+70]     ;  arg3: Y$ w9 [6 R% W; _+ ~2 A! M
0071B908  |.  8BD6                  mov edx,esi, E- Q( v; r  ^$ T
0071B90A  |.  894C24 24             mov dword ptr ss:[esp+24],ecx" X; D& G% j  \: G
0071B90E  |.  2BD0                  sub edx,eax
& u  J9 k+ d5 z0 J% w0 d$ G9 D0071B910  |.  8B43 0C               mov eax,dword ptr ds:[ebx+C]
$ M# x% W" Q$ b5 l  ?; a( D0071B913  |.  8BD8                  mov ebx,eax4 }" g2 l4 G" P% o" W4 |
0071B915  |.  0FAFDE                imul ebx,esi
# I. O8 n4 j; k! t/ X$ _0071B918  |.  8D344B                lea esi,dword ptr ds:[ebx+ecx*2]- \/ s8 n9 V  r1 c0 u$ Z2 Y
0071B91B  |.  8B4C24 68             mov ecx,dword ptr ss:[esp+68]
1 |0 H4 h6 k2 H+ b  y0071B91F  |.  8B59 10               mov ebx,dword ptr ds:[ecx+10]. z+ A5 l, s2 a$ M
0071B922  |.  8B4C24 10             mov ecx,dword ptr ss:[esp+10]
# P9 I' D; }1 {  ]& \" s0071B926  |.  03F3                  add esi,ebx
6 I' L6 `& X- P, h: B) T0071B928  |.  8B49 0C               mov ecx,dword ptr ds:[ecx+C]
7 }) b. Z% [# Q0071B92B  |.  897424 68             mov dword ptr ss:[esp+68],esi;  重点:将缓冲区地址写入栈内(原arg1处)6 h1 z+ M% ?9 G2 x
0071B92F  |.  8BD9                  mov ebx,ecx
& f/ A0 Y2 z! F: z0071B931  |.  2BCD                  sub ecx,ebp
% }" C. K# u( b$ D0071B933  |.  0FAFDA                imul ebx,edx
/ w$ R$ F8 l5 r4 o" n* N0071B936  |.  8B5424 10             mov edx,dword ptr ss:[esp+10], E; {0 Z( R, \9 F9 p" U2 C1 B
0071B93A  |.  894C24 20             mov dword ptr ss:[esp+20],ecx
8 ^# ^5 X5 C/ U9 K: R- p, d8 v0071B93E  |.  8D4C2D 00             lea ecx,dword ptr ss:[ebp+ebp]8 j& M1 S0 K9 @! j! S7 n) ~; ]
0071B942  |.  035A 10               add ebx,dword ptr ds:[edx+10]8 g9 r9 U; d% t5 L. Y4 [
0071B945  |.  8B5424 18             mov edx,dword ptr ss:[esp+18]  A& g( ?. b0 k3 \
0071B949  |.  2BC1                  sub eax,ecx
0 V; R+ w7 ~9 z& Y) U3 w: D0071B94B  |.  894424 24             mov dword ptr ss:[esp+24],eax
1 E) X* g0 R8 T4 b3 z% _4 H0071B94F  |.  03DF                  add ebx,edi5 O5 \9 q0 q, m% |
0071B951  |.  8BC2                  mov eax,edx0 u, j6 F+ M1 k# N
0071B953  |.  4A                    dec edx
& U5 F9 e: Y! s' @0071B954  |.  85C0                  test eax,eax+ D, }+ K1 j8 O, l; X1 A
0071B956  |.  0F84 3A010000         je heroes4.0071BA96
" H, L( F) W( O9 N- R3 u0071B95C  |.  42                    inc edx
" P: v/ y0 m# K0 E+ u& D: c5 {+ i0071B95D  |.  895424 18             mov dword ptr ss:[esp+18],edx% ^( U" b1 K, Z( F
0071B961  |>  85ED                  /test ebp,ebp( O3 c# N% ?2 p: q
0071B963  |.  0F84 0E010000         |je heroes4.0071BA77$ G' ~' Q( Q/ D
0071B969  |.  8B4424 74             |mov eax,dword ptr ss:[esp+74]
! e: g& F  H4 {% K0071B96D  |.  896C24 14             |mov dword ptr ss:[esp+14],ebp" h) e2 W( ~; O( O  G' X
0071B971  |.  25 FFFF0000           |and eax,0FFFF& z" c1 A  ~) R* `5 K) g& H, i% a0 }
0071B976  |.  894424 10             |mov dword ptr ss:[esp+10],eax
, h: d# a7 }  @1 @0071B97A  |>  8A4424 78             |/mov al,byte ptr ss:[esp+78]
- v* [! L! `/ S$ N2 w/ j# C$ H" B8 h0071B97E  |.  8B2D DCF0AA00         ||mov ebp,dword ptr ds:[AAF0DC]) b& ?5 w2 r9 i' F; z1 V
0071B984  |.  84C0                  ||test al,al: j! n: l4 x; _7 L- v1 v8 n6 B' c
0071B986  |.  74 6A                 ||je short heroes4.0071B9F27 J$ ]& d$ ^+ j; l' m
0071B988  |.  8A0B                  ||mov cl,byte ptr ds:[ebx]        ;  取字模的像素点
7 O0 u' M  z1 F0071B98A  |.  8B4424 7C             ||mov eax,dword ptr ss:[esp+7C]
, [9 R7 m! \5 c' V  g0071B98E  |.  83E1 0F               ||and ecx,0F                      ;  取低四位
% v9 H2 ~3 ~* N; L3 m9 p- ~4 @0071B991  |.  25 FFFF0000           ||and eax,0FFFF* }7 k8 X5 a3 @4 _
0071B996  |.  8BF9                  ||mov edi,ecx% N4 k2 r6 A+ m/ X8 c) P
0071B998  |.  33C9                  ||xor ecx,ecx: ~4 a; t3 P1 \2 i/ a3 |" F
0071B99A  |.  66:8B0E               ||mov cx,word ptr ds:[esi]        ;  取缓冲区的原值' M$ B2 y! v# ?
0071B99D  |.  85FF                  ||test edi,edi                    ;  检查字模的像素点低四位是否为0
' E. s# @. f* l0071B99F  |.  74 54                 ||je short heroes4.0071B9F5       ;  为0则不作处理
5 A* s: e/ E+ l- N% i, `0071B9A1  |.  8BD7                  ||mov edx,edi
8 C- i5 |% ^# m) b0071B9A3  |.  8BF1                  ||mov esi,ecx
* U+ D" T" c$ Y8 z0071B9A5  |.  C1FA 03               ||sar edx,3
4 Z3 z: U, Z9 G4 q9 N7 b0071B9A8  |.  83E2 01               ||and edx,1
/ d0 n8 ~! A8 J# h# p  e0 i0071B9AB  |.  03FA                  ||add edi,edx
" t& H& |3 n0 W0071B9AD  |.  8BD1                  ||mov edx,ecx
0 `1 R; {$ f! K1 R/ _0071B9AF  |.  8B0D 04F1AA00         ||mov ecx,dword ptr ds:[AAF104]
7 B! @3 |7 Y6 t+ J! m0071B9B5  |.  23D5                  ||and edx,ebp
. ~( ^1 [8 t) i& l' M) ?7 A0071B9B7  |.  23F1                  ||and esi,ecx5 _0 m$ H, U4 y4 c4 v0 v+ v
0071B9B9  |.  8BC8                  ||mov ecx,eax
2 f6 n, `, F% z( _0071B9BB  |.  230D 04F1AA00         ||and ecx,dword ptr ds:[AAF104], u8 [! v" z. @: B0 s# K
0071B9C1  |.  23C5                  ||and eax,ebp
' D  N; R8 h; z+ w0 ?' l0071B9C3  |.  2BC2                  ||sub eax,edx2 [! E" ?+ W' h- y- e$ o
0071B9C5  |.  2BCE                  ||sub ecx,esi
& R$ ]% H. `9 F) x# C) b0071B9C7  |.  0FAFC7                ||imul eax,edi
/ P* U# z7 g0 L+ A0071B9CA  |.  0FAFCF                ||imul ecx,edi1 g5 M8 f" q- E( L5 A) U% k
0071B9CD  |.  C1E6 04               ||shl esi,4
+ C  F* e$ W# V4 x5 A$ U/ v* \0071B9D0  |.  03CE                  ||add ecx,esi
5 @3 ]3 ^: F6 ^# I* R. T9 H0071B9D2  |.  8B35 F4F0AA00         ||mov esi,dword ptr ds:[AAF0F4]! `  ]6 f% R2 j# |
0071B9D8  |.  C1E2 04               ||shl edx,4! g$ a. x" t2 r. V1 P
0071B9DB  |.  23CE                  ||and ecx,esi
! v$ a' E# L, a0071B9DD  |.  8B35 D8F0AA00         ||mov esi,dword ptr ds:[AAF0D8]
+ q2 {. |* T# I3 l1 r0071B9E3  |.  03C2                  ||add eax,edx
9 E, j& l; d) {! [/ y+ V0071B9E5  |.  23C6                  ||and eax,esi
; [3 y. X6 P. H5 j; z% Z0071B9E7  |.  8B7424 68             ||mov esi,dword ptr ss:[esp+68]
6 P7 g7 o  x) P+ F/ v4 d. [1 |0071B9EB  |.  03C8                  ||add ecx,eax
: u  J# Y9 O9 [6 q0071B9ED  |.  C1F9 04               ||sar ecx,4
5 ~# b/ A( F4 c* E; Y8 Y0071B9F0  |.  EB 03                 ||jmp short heroes4.0071B9F5, H0 \: h" d7 u1 F
0071B9F2  |>  66:8B0E               ||mov cx,word ptr ds:[esi]
  n- j3 ^3 F2 e2 z- O0071B9F5  |>  33D2                  ||xor edx,edx
( Z+ ~, y! P+ w% r' Z. c9 d0071B9F7  |.  81E1 FFFF0000         ||and ecx,0FFFF
7 p. |$ j- g6 Y9 l0071B9FD  |.  8A13                  ||mov dl,byte ptr ds:[ebx]
- h7 M2 \1 X$ q7 S8 w- I1 s0071B9FF  |.  8BC1                  ||mov eax,ecx
% Y( C$ M; ^" Y5 U3 O, \+ j0071BA01  |.  C1EA 04               ||shr edx,4                       ;  取高四位
9 |7 b0 j6 S6 P" g3 @+ Y, T0071BA04  |.  85D2                  ||test edx,edx                    ;  检查字模的像素点高四位是否为0
: |8 \8 P0 U8 V' U3 Q6 ]1 _0071BA06  |.  74 51                 ||je short heroes4.0071BA59       ;  为0则不作处理
! D! j* B8 V- p, M; @  I0071BA08  |.  8BCA                  ||mov ecx,edx( p1 x# I& b& @. t5 k  ^4 l. c5 [" H
0071BA0A  |.  8BF0                  ||mov esi,eax5 j- b2 G  M* x  I% \9 H* m
0071BA0C  |.  C1F9 03               ||sar ecx,3
6 S3 H4 R( S. Z0 O2 b0071BA0F  |.  83E1 01               ||and ecx,1& `2 o1 ^  p3 G6 t: {& C" b
0071BA12  |.  23F5                  ||and esi,ebp
/ L( D5 F5 P# o/ }, r6 g0071BA14  |.  03D1                  ||add edx,ecx  L* w1 O1 m; `! f% w! I2 q
0071BA16  |.  8BC8                  ||mov ecx,eax
! i! x: Q/ o2 a5 q; Z0071BA18  |.  8B4424 10             ||mov eax,dword ptr ss:[esp+10]3 y- y. \" ]: j- b
0071BA1C  |.  8B3D 04F1AA00         ||mov edi,dword ptr ds:[AAF104]- r0 t7 }" N' v& I: L
0071BA22  |.  23C5                  ||and eax,ebp
# x4 t& \, a! I, \# ~- \6 P' M- S0071BA24  |.  23CF                  ||and ecx,edi
) c8 W" o" p5 E) R0071BA26  |.  2BC6                  ||sub eax,esi) d' O3 u- c1 X8 M+ T0 z. ^! L
0071BA28  |.  0FAFC2                ||imul eax,edx! h! h7 N9 w! s# p5 C
0071BA2B  |.  C1E6 04               ||shl esi,43 Q7 y( D  ~8 j7 p- F4 T! z
0071BA2E  |.  03C6                  ||add eax,esi
# f. H5 C6 W# r; x1 z! f0071BA30  |.  8B35 D8F0AA00         ||mov esi,dword ptr ds:[AAF0D8]
! `, K2 c4 ?; E' \% h4 T0071BA36  |.  23C6                  ||and eax,esi
3 Y4 r7 o. w2 i6 [* Q0071BA38  |.  8B7424 10             ||mov esi,dword ptr ss:[esp+10]4 D/ c% o$ ]" y( d+ i
0071BA3C  |.  23F7                  ||and esi,edi
9 w- V$ w7 h) `5 L; t9 J3 R0071BA3E  |.  8B3D F4F0AA00         ||mov edi,dword ptr ds:[AAF0F4]
; @2 O% R# m9 R7 _$ p. N1 J0 f0071BA44  |.  2BF1                  ||sub esi,ecx
4 k: C9 W- A+ w4 F  {6 T0071BA46  |.  0FAFF2                ||imul esi,edx, i+ K- r1 N# i7 j: ~+ H
0071BA49  |.  C1E1 04               ||shl ecx,4
4 V1 o3 Z* ]4 h' T, D  V9 J0071BA4C  |.  03F1                  ||add esi,ecx" t+ m4 n  w2 q/ L5 W" s5 S
0071BA4E  |.  23F7                  ||and esi,edi
7 C' H! X4 K7 K! v& o$ Q/ t& k/ U0071BA50  |.  03C6                  ||add eax,esi6 R, x8 C8 T7 C  W" B& W8 }
0071BA52  |.  8B7424 68             ||mov esi,dword ptr ss:[esp+68]
3 W1 K8 W* U; _! X/ E0071BA56  |.  C1F8 04               ||sar eax,47 I* D! F: d  `6 S" l5 ?
0071BA59  |>  66:8906               ||mov word ptr ds:[esi],ax        ;  将经过处理后的缓冲区值放回原处. D/ M) t8 G$ L" x/ b7 B1 H- k1 @
0071BA5C  |.  8B4424 14             ||mov eax,dword ptr ss:[esp+14]
9 ]7 w% N) \% v. E( ]- x% J0071BA60  |.  43                    ||inc ebx                         ;  指向字模的下个像素点6 N& n4 H0 ?8 {# ^; Q/ i+ ?# Q
0071BA61  |.  83C6 02               ||add esi,2                       ;  指向缓冲区的下个点
# O- N: P% w- {, L0071BA64  |.  48                    ||dec eax                         ;  计数值减10 D3 d  P. X( |; e- W
0071BA65  |.  897424 68             ||mov dword ptr ss:[esp+68],esi* C' |. R6 F* `, h4 Q- F' J) w
0071BA69  |.  894424 14             ||mov dword ptr ss:[esp+14],eax2 @; n+ W" r2 U8 a3 s( t
0071BA6D  |.^ 0F85 07FFFFFF         |\jnz heroes4.0071B97A
: \7 h. W$ V0 A7 R/ e8 {4 D0071BA73  |.  8B6C24 1C             |mov ebp,dword ptr ss:[esp+1C]
* @2 m3 e6 c) U( t3 c" }, _0071BA77  |>  8B5424 20             |mov edx,dword ptr ss:[esp+20]* X" Z$ u/ `# U% f0 u% ^% W
0071BA7B  |.  8B4C24 24             |mov ecx,dword ptr ss:[esp+24]
. A; D" e2 }+ }; ^; \2 f0071BA7F  |.  8B4424 18             |mov eax,dword ptr ss:[esp+18]
1 l; T4 Z) r+ i7 C7 F: _0071BA83  |.  03DA                  |add ebx,edx                      ;  指向字模的下行像素点/ @6 d3 |- e- a1 [2 x
0071BA85  |.  03F1                  |add esi,ecx                      ;  指向缓冲区的下行点+ `4 f8 Y: r8 p# z
0071BA87  |.  48                    |dec eax                          ;  计数值减1
7 z9 L, Y1 r0 r* L" ^! E0071BA88  |.  897424 68             |mov dword ptr ss:[esp+68],esi
" @2 b" `  E: F! y2 f0071BA8C  |.  894424 18             |mov dword ptr ss:[esp+18],eax
+ Z7 G  C$ J! U8 O0 m, q5 O0071BA90  |.^ 0F85 CBFEFFFF         \jnz heroes4.0071B9614 g% Z: Z, M3 F
0071BA96  |>  5F                    pop edi
. F* P& \' F* K& ~0071BA97  |.  5E                    pop esi
# _$ a  N1 Z3 L  _( M3 H0071BA98  |.  5D                    pop ebp
$ V* T. i: I; O- B* |) z- j# y0071BA99  |.  5B                    pop ebx
- v$ o& m/ l4 M: s6 B! W( w' [0071BA9A  |.  83C4 54               add esp,54; K! P5 b/ |1 c
0071BA9D  \.  C2 1800               retn 18
8 M$ U8 ^2 A, P6 z: \本函数的核心是两层循环,从71B9A1开始就是循环体,整个换算过程是一个比较复杂的算法,可以简单表示为:! i- \0 a2 T( |, i" m* G
. V$ ^  c- o( y" T5 H- j
buf[x][y]=func(buf[x][y],zm[x/2][y/2])$ Z# o) m1 N" h9 v# d8 D/ {5 ~
7 Y. r$ E8 R+ o$ V
buf:缓冲区二维数组,两个字节表示一个点
( B7 C: A. G1 u4 r: R8 ozm:字模二维数组,一个字节表示一个点
作者: shane007    时间: 2010-3-16 21:37
建议楼主可以内挂一个DLL代替原来的函数。疯人院就是这么搞的.3 j1 C2 \1 d  Z3 j9 [/ n& q

( l8 H: a' Z" B. ~2 A7 v) c对了,这个游戏是直接写显存的?3 _% u: U& w# w
不是写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发表的  :
: I8 q( F6 u& m/ X1 p( F两方面都有!
$ Z. O: {. n+ T) |7 e
论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。9 G2 l& J5 ?! [
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?
作者: shane007    时间: 2010-3-17 22:31
[quote]引用第4楼shane007于2010-03-17 22:30发表的 :
/ A1 Z+ B) q" q) c3 S. W$ O3 y8 L
1 G: _% G" r# B8 {( M4 x
2 L3 w' }# ?1 [# X1 x* w- b论坛很需要像楼主这样的人才啊。希望楼主多多发表后需汉化资料。 " T6 d9 n( N7 Q* l1 t+ i% o
目前论坛有几个游戏需要会汇编的人才,不知道楼主可愿意帮忙?- n! b& g7 j7 ?* k  v0 V
如果愿意的话也一定会让你有所收获的。
作者: jinxin8866    时间: 2010-3-18 03:21
可以啊,希望能帮上忙




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