冒险解谜游戏中文网 ChinaAVG
标题:
【DirectDraw游戏汉化 #2】 静物前传(Post Mortem)寻找CreateSurface
[打印本页]
作者:
shane007
时间:
2023-8-25 16:59
标题:
【DirectDraw游戏汉化 #2】 静物前传(Post Mortem)寻找CreateSurface
这游戏以前分析过,本贴再写得详细一些。
3 E# w2 x' k4 v: R. q( x; Z
这是一个DirectDraw游戏,在Post Mortem\Dlls下的DX7SoundManager.dll里完成对DirectDraw的初始化,
/ [! h* |( p4 b& p3 u& b
注意,初始化不是用导入函数方式进行,而是以loadlibrary方式进行的。
, h1 X, r5 h, V/ d) v
8 w3 @& ^4 j% @5 ^; o
参考DDRAW.H得知CreateSurface是其中第7个函数,则函数偏移量为4X(7-1)=24,就是0x18.
- A* m( `0 A% c) e9 P+ T( j, |" w$ W
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;
' d- h+ C: q5 x* @$ W
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
6 d6 H# J* `& U5 n6 a3 ]. }6 |, I& x
STDMETHOD_(ULONG,Release) (THIS) PURE;
m% B" a+ b# \
STDMETHOD(Compact)(THIS) PURE;
0 m+ |- m i. N- B+ ]6 _
STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
4 C, w# v! g3 q
STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
( c+ F. B& E) X& p8 ^* n
STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC, LPDIRECTDRAWSURFACE FAR *, IUnknown FAR *) PURE;
复制代码
' F/ s& M. K" r% j+ p1 o
以下一段中完成CreateSurface。
.text:24BC2E53 call dword ptr [ecx+18h]
复制代码
5 R7 i* T- P$ x$ h: ^0 S
" i' n' d* @+ f9 e: f9 e
" x% q! H; L+ L; P; o
' y. }! z/ i# A, @. S8 u
G0 \/ X; n" j# y' D# i
.text:24BC2CD2 ; =============== S U B R O U T I N E =======================================
7 o. D# x/ C8 c" F3 t" e
.text:24BC2CD2
) e4 ?3 F4 `& H. E' I
.text:24BC2CD2 ; Attributes: bp-based frame
5 i# J9 y$ y7 o4 C0 A* z, l
.text:24BC2CD2
5 t: Y) R8 r y2 f
.text:24BC2CD2 sub_24BC2CD2 proc near ; CODE XREF: .text:loc_24BC2811↑p
3 ~$ `* Q* V& q) H4 w% z8 R
.text:24BC2CD2
; d7 v! I* V/ z5 G
.text:24BC2CD2 Dst = dword ptr -90h
" y/ `, _) H# ^) `8 o
.text:24BC2CD2 var_8C = dword ptr -8Ch
+ F, v) c2 d) y
.text:24BC2CD2 var_28 = dword ptr -28h
. O4 F# ?9 i2 K
.text:24BC2CD2 var_24 = dword ptr -24h
A1 J) _0 k. z% Y* ^% ?- l. ~. |
.text:24BC2CD2 var_20 = dword ptr -20h
0 d% o! ]$ C k7 I7 X3 c
.text:24BC2CD2 var_1C = dword ptr -1Ch
0 O; J7 m8 J* F) v! W! h+ y
.text:24BC2CD2 var_18 = dword ptr -18h
, @' I J; z3 `8 P7 z7 n4 Q4 V* s
.text:24BC2CD2 ppv = dword ptr -14h
( T1 A% M& a# ~, m- x! l
.text:24BC2CD2 var_10 = dword ptr -10h
& j/ k7 h/ J% |+ k4 D
.text:24BC2CD2 var_C = dword ptr -0Ch
1 X7 t' {+ U7 {) G0 k/ h9 b6 J- A
.text:24BC2CD2 var_8 = dword ptr -8
, G; l* x0 X& u1 [9 R) \# F
.text:24BC2CD2 hLibModule = dword ptr -4
' E' T" N2 @. _ _! y* E+ Y8 T
.text:24BC2CD2
9 N0 l1 t4 r3 X* m( K. r
.text:24BC2CD2 push ebp
) ~. u* r! G' q
.text:24BC2CD3 mov ebp, esp
0 _/ }" d3 k8 N$ B& @0 z8 w$ \
.text:24BC2CD5 sub esp, 90h
3 I/ r. g0 T5 G8 {4 @% j! L
.text:24BC2CDB push ebx
" i+ M* y$ s( V( L
.text:24BC2CDC mov ebx, ds:LoadLibraryA
3 K+ j5 I6 M: p& g/ u- b
.text:24BC2CE2 push esi
. d8 P: X, J# [4 z
.text:24BC2CE3 push edi
5 Z/ n& h0 K$ T2 n
.text:24BC2CE4 xor edi, edi
, r$ r& m6 K+ H8 x/ D- E" ?: E
.text:24BC2CE6 push offset LibFileName ; "DDRAW.DLL"
( ?0 [) a. t: E
.text:24BC2CEB mov [ebp+var_8], edi
2 }1 A4 J6 C! c, q
.text:24BC2CEE mov [ebp+var_1C], edi
9 z; G+ n/ H: C& {1 ?
.text:24BC2CF1 mov [ebp+var_C], edi
, b5 x1 |& c0 ^+ G: n8 Z; w/ h# _" I$ R
.text:24BC2CF4 mov [ebp+var_10], edi
! u/ ~( E# k1 f
.text:24BC2CF7 mov [ebp+var_18], edi
, d# [( N5 z# L
.text:24BC2CFA call ebx ; LoadLibraryA
( @5 G' r4 W" n- I/ R6 [' E
.text:24BC2CFC mov esi, eax
$ o6 e% v H5 _$ j
.text:24BC2CFE cmp esi, edi
0 x: o8 j. p& E/ M. O0 `* w! r
.text:24BC2D00 mov [ebp+hLibModule], esi
& R7 ]" y$ A6 d2 o( S
.text:24BC2D03 jnz short loc_24BC2D0F
% k" [' }9 o: @7 p- ^. r4 j
.text:24BC2D05 push offset aCouldnTLoadlib ; "Couldn't LoadLibrary DDraw\r\n"
( P B B, F3 r G
.text:24BC2D0A jmp loc_24BC2E6D
$ n5 h0 W( ]4 q k
.text:24BC2D0F ; ---------------------------------------------------------------------------
- ]8 I8 x1 b5 l( v8 _% s8 E4 O
.text:24BC2D0F
6 v3 [- j6 A3 Z/ ?3 r7 \4 d
.text:24BC2D0F loc_24BC2D0F: ; CODE XREF: sub_24BC2CD2+31↑j
|' ?, A$ [# r3 U/ C
.text:24BC2D0F push offset ProcName ; "DirectDrawCreate"
! {8 B6 Y8 }$ ^4 w n- i
.text:24BC2D14 push esi ; hModule
# F: d' U8 v- \% c
.text:24BC2D15 call ds:GetProcAddress
/ ^, t! Y2 \9 B; i- q/ Q
.text:24BC2D1B cmp eax, edi
4 P7 L9 j# a+ B* O" }: i
.text:24BC2D1D jnz short loc_24BC2D30
1 }$ S3 D8 Q* w5 k q
.text:24BC2D1F push esi ; hLibModule
0 I, W. n! v* b- B/ h! @
.text:24BC2D20 call ds:FreeLibrary
2 }! }! N6 y* p
.text:24BC2D26 push offset aCouldnTGetproc ; "Couldn't GetProcAddress DirectDrawCreat"...
# }% Y' _6 f7 r7 }( c* y
.text:24BC2D2B jmp loc_24BC2E6D
" w7 G; C4 C9 [! ^0 B) B
.text:24BC2D30 ; ---------------------------------------------------------------------------
8 S- P' \8 N8 u) u* E" r( t
.text:24BC2D30
; y9 F- A8 j: H+ D$ l) \
.text:24BC2D30 loc_24BC2D30: ; CODE XREF: sub_24BC2CD2+4B↑j
0 o P6 j/ t5 S: O! Y
.text:24BC2D30 lea ecx, [ebp+var_8]
& j, O$ l1 y7 h
.text:24BC2D33 push edi
. \& C) e+ y6 a7 \
.text:24BC2D34 push ecx
# ], r2 W9 A/ b- N/ P
.text:24BC2D35 push edi
8 l' g! m0 T) @* n8 ?2 I+ l
.text:24BC2D36 call eax
[; z$ N. ^0 N; z: C( y* R1 C$ g
.text:24BC2D38 test eax, eax
: Q y' f6 e6 |+ k1 }: V1 C
.text:24BC2D3A jge short loc_24BC2D4D
6 |2 b \. S$ D0 V# M: z; K& F3 F
.text:24BC2D3C push esi ; hLibModule
, E- b4 b8 P1 v2 {
.text:24BC2D3D call ds:FreeLibrary
) B* D5 F7 c, e# E
.text:24BC2D43 push offset aCouldnTCreateD ; "Couldn't create DDraw\r\n"
- y. V0 e& g, A3 G0 d' d6 M
.text:24BC2D48 jmp loc_24BC2E6D
$ w! m4 `# D* o" d4 @' j) P
.text:24BC2D4D ; ---------------------------------------------------------------------------
, N1 @( W6 f/ p) ^" x& b# G1 E1 N
.text:24BC2D4D
8 S' _3 l0 Q: J9 _" K' w% m8 @
.text:24BC2D4D loc_24BC2D4D: ; CODE XREF: sub_24BC2CD2+68↑j
1 [" b; ~: G N8 H
.text:24BC2D4D mov eax, [ebp+var_8]
- H" l$ {/ [+ U9 m
.text:24BC2D50 lea edx, [ebp+var_1C]
8 X: X6 ^- ^- a$ J% I, ?
.text:24BC2D53 push edx
0 H, }8 y3 N/ y, E
.text:24BC2D54 push offset unk_24BC4470
J; W& G+ H/ x
.text:24BC2D59 mov ecx, [eax]
, S& U( O+ t: d- A7 p, m
.text:24BC2D5B push eax
* V! E; a! z- Q! U9 N
.text:24BC2D5C call dword ptr [ecx]
: F' f* W6 B# R# t2 _
.text:24BC2D5E test eax, eax
/ z3 p& G/ B: y' s$ r6 ^. c: F
.text:24BC2D60 jge short loc_24BC2D87
5 t R5 @) O6 x8 O4 `* Q6 }# P
.text:24BC2D62 mov eax, [ebp+var_8]
1 U: T$ {! P- r1 b9 T! s, n
.text:24BC2D65 push eax
: P9 }) q' R6 w# V6 y/ v% B
.text:24BC2D66 mov ecx, [eax]
: M) ]( I: a) I! S# I# Y, t4 t
.text:24BC2D68 call dword ptr [ecx+8]
( J( `4 Y2 K) o0 K7 n
.text:24BC2D6B push esi ; hLibModule
- L) f1 R6 }7 D3 E, N
.text:24BC2D6C call ds:FreeLibrary
, D% W: G* h# u e5 ?5 w
.text:24BC2D72 push offset OutputString ; "Couldn't QI DDraw2\r\n"
% @( T) E! X) Z$ R; a$ D2 ?
.text:24BC2D77 call ds:OutputDebugStringA
( M% X" l# A4 \' m* C
.text:24BC2D7D mov eax, 100h
$ x$ v7 O, M! v: y% |
.text:24BC2D82 jmp loc_24BC3011
; _$ z o- I. E @( o6 l. a
.text:24BC2D87 ; ---------------------------------------------------------------------------
5 C5 M' ^' b9 f' p
.text:24BC2D87
i+ r& _7 x5 }* ?
.text:24BC2D87 loc_24BC2D87: ; CODE XREF: sub_24BC2CD2+8E↑j
z0 I# ]( c4 d. ?
.text:24BC2D87 mov eax, [ebp+var_1C]
" X9 M- G( N7 K4 O" M
.text:24BC2D8A push eax
2 P+ X& f" J: O8 D/ i3 U9 }, s
.text:24BC2D8B mov ecx, [eax]
5 d% i+ O5 c& C, s4 _6 W
.text:24BC2D8D call dword ptr [ecx+8]
3 X+ ^* ?* o K
.text:24BC2D90 push offset aDinputDll ; "DINPUT.DLL"
1 r& |2 j' @8 b
.text:24BC2D95 call ebx ; LoadLibraryA
* A" Z* @/ |5 @+ U8 ]
.text:24BC2D97 mov esi, eax
2 w- M& f9 A3 ^# C3 A4 t( i
.text:24BC2D99 cmp esi, edi
4 U5 H" M) X& W
.text:24BC2D9B jnz short loc_24BC2DB6
$ Q7 H' n$ B5 }) P; l2 ?6 g
.text:24BC2D9D mov eax, [ebp+var_8]
0 o" S% Y& A7 P& N0 m2 L
.text:24BC2DA0 push eax
0 ~3 A5 i: l& D- f4 G
.text:24BC2DA1 mov ecx, [eax]
. k3 j' \4 B, h$ u# X* L4 y
.text:24BC2DA3 call dword ptr [ecx+8]
! T# j/ E: v9 V7 s7 j. y
.text:24BC2DA6 push [ebp+hLibModule] ; hLibModule
% u. v: l3 O. J3 C7 m
.text:24BC2DA9 call ds:FreeLibrary
: d; Q1 o8 y |& V7 b4 I4 f d
.text:24BC2DAF push offset aCouldnTLoadlib_0 ; "Couldn't LoadLibrary DInput\r\n"
# Z: i( G' P0 A) z6 R
.text:24BC2DB4 jmp short loc_24BC2DE2
5 q- g; Z4 t# Z$ e' ]
.text:24BC2DB6 ; ---------------------------------------------------------------------------
9 q1 [9 U+ t7 ?( T
.text:24BC2DB6
9 m0 {4 ~7 j- ?8 [0 b0 s, l
.text:24BC2DB6 loc_24BC2DB6: ; CODE XREF: sub_24BC2CD2+C9↑j
# u0 B- U4 m" B8 ]
.text:24BC2DB6 push offset aDirectinputcre ; "DirectInputCreateA"
8 L) p" h) I8 ?9 m1 z
.text:24BC2DBB push esi ; hModule
9 [/ I: u* ?. w4 e% W) Y0 R
.text:24BC2DBC call ds:GetProcAddress
% I" ^1 S, f4 s& _( ^% q- u
.text:24BC2DC2 push esi ; hLibModule
2 a. s) ^1 y8 n O* h7 Z
.text:24BC2DC3 mov esi, ds:FreeLibrary
+ K& b k: x% O7 W
.text:24BC2DC9 test eax, eax
6 [! F3 w {$ Z/ v2 O. P
.text:24BC2DCB jnz short loc_24BC2DF2
- l' E0 z8 q1 g, Q1 A
.text:24BC2DCD call esi ; FreeLibrary
: X; ?3 h9 {/ a! w" Q- j
.text:24BC2DCF mov eax, [ebp+var_8]
8 s! _0 e9 K# Q( U( Y, i9 Q/ }2 a
.text:24BC2DD2 push eax
- h5 O1 y2 O9 _; I9 n5 O( r
.text:24BC2DD3 mov ecx, [eax]
, B z) N! z- z/ F
.text:24BC2DD5 call dword ptr [ecx+8]
0 \$ I/ z6 J9 `/ k
.text:24BC2DD8 push [ebp+hLibModule] ; hLibModule
* O% N; J6 }9 l" l
.text:24BC2DDB call esi ; FreeLibrary
! |; Q0 W, l% @4 R, ]; ^4 {
.text:24BC2DDD push offset aCouldnTGetproc_0 ; "Couldn't GetProcAddress DInputCreate\r"...
9 w \1 `9 V4 K0 B" v' n$ [
.text:24BC2DE2
% f& ? }- [+ L1 R- ^+ P M
.text:24BC2DE2 loc_24BC2DE2: ; CODE XREF: sub_24BC2CD2+E2↑j
+ x9 a9 w$ r" D
.text:24BC2DE2 call ds:OutputDebugStringA
; ^2 c# ?7 p2 Q. E- j8 Z/ s( b$ ~
.text:24BC2DE8 mov eax, 200h
3 Y' C8 }' t/ w% r- F6 t6 {" ?- w* ]
.text:24BC2DED jmp loc_24BC3011
; R% g8 G* `4 I1 C. _6 h9 g
.text:24BC2DF2 ; ---------------------------------------------------------------------------
, L; V) J# R- i8 N& B! N
.text:24BC2DF2
* s: L+ U5 i& s0 y
.text:24BC2DF2 loc_24BC2DF2: ; CODE XREF: sub_24BC2CD2+F9↑j
4 o/ \5 _ a/ A6 V
.text:24BC2DF2 call esi ; FreeLibrary
) q* k7 a" j+ ?# k$ `+ W+ f
.text:24BC2DF4 push 6Ch ; Size
4 X/ x5 N9 E/ E) }6 f9 P
.text:24BC2DF6 lea eax, [ebp+Dst]
2 C' f' N1 x$ h4 p+ C% w
.text:24BC2DFC push edi ; Val
4 I7 j; W |) Y8 ~
.text:24BC2DFD push eax ; Dst
/ h; T: M+ `5 t" s& M: i, L7 w8 _6 o
.text:24BC2DFE call memset
' Z$ v0 @ h F: s; l7 ?
.text:24BC2E03 mov eax, [ebp+var_8]
" o/ K1 E* t. x2 ?7 N. T* y d
.text:24BC2E06 add esp, 0Ch
7 p+ ]7 b+ s# z. \# O9 n
.text:24BC2E09 mov [ebp+Dst], 6Ch
) c- s. c$ f2 g
.text:24BC2E13 mov [ebp+var_8C], 1
. y1 w" ?4 j% _
.text:24BC2E1D mov [ebp+var_28], 200h
2 t8 o) {0 O( C0 v+ z: C3 k
.text:24BC2E24 mov ecx, [eax]
( E4 \2 l& D9 b0 ]9 @
.text:24BC2E26 push 8
$ V8 g. M$ J9 I) ]0 W. |
.text:24BC2E28 push edi
! x4 w" Q3 `9 z. c
.text:24BC2E29 push eax
' E) z( I1 I' I5 M- D( m6 {
.text:24BC2E2A call dword ptr [ecx+50h]
; `; g+ x) s. A0 b/ X! G
.text:24BC2E2D test eax, eax
1 _# }6 w q0 A
.text:24BC2E2F mov eax, [ebp+var_8]
5 q; A$ n2 ?% j. a& {4 C6 e( T6 M
.text:24BC2E32 mov ecx, [eax]
2 `4 {; N2 E/ f3 Q6 m' e% f
.text:24BC2E34 jge short loc_24BC2E46
{6 g8 Y' W% |/ o! q$ q! p
.text:24BC2E36 push eax
% {* C. A" \: T1 L" e. K( T3 }8 r9 a
.text:24BC2E37 call dword ptr [ecx+8]
4 Q# I. o7 q1 o
.text:24BC2E3A push [ebp+hLibModule] ; hLibModule
1 g: I* S$ X/ W e( d3 e
.text:24BC2E3D call esi ; FreeLibrary
. e8 p( @2 @) w7 g" q
.text:24BC2E3F push offset aCouldnTSetCoop ; "Couldn't Set coop level\r\n"
+ q3 u! F0 z8 \* t% V9 w* ]; g2 M2 k, `$ q
.text:24BC2E44 jmp short loc_24BC2E6D
5 Q8 c7 z4 @* e' q/ p/ K4 R6 _ y
.text:24BC2E46 ; ---------------------------------------------------------------------------
1 |, w9 s5 d: i6 }5 x
.text:24BC2E46
3 u0 o h$ H3 d( @; M/ l
.text:24BC2E46 loc_24BC2E46: ; CODE XREF: sub_24BC2CD2+162↑j
% X) ?( r* X0 O) |9 Z8 H: v
.text:24BC2E46 lea edx, [ebp+var_C]
( u: j# G" _* J- R8 K: v
.text:24BC2E49 push edi
2 _! E) q; }( a: q. U [) p
.text:24BC2E4A push edx
! A; q3 _2 l6 b) s' t
.text:24BC2E4B lea edx, [ebp+Dst]
9 u: r) M6 Z; y# u; y) X
.text:24BC2E51 push edx
: `) Z8 p, D: u% |, y+ K
.text:24BC2E52 push eax
. e) i, b2 b4 u' k7 e
.text:24BC2E53 call dword ptr [ecx+18h]
; h$ e' Y& \0 Y4 V: ~0 F3 z
.text:24BC2E56 test eax, eax
9 [, b! s% l( M8 M* z! i- A
.text:24BC2E58 jge short loc_24BC2E7A
9 U |, O l- g+ _+ w) d
.text:24BC2E5A mov eax, [ebp+var_8]
8 M0 ~3 H5 o& f! R
.text:24BC2E5D push eax
, p. o- o* \8 U! V$ U( T' M3 ]
.text:24BC2E5E mov ecx, [eax]
1 N) [. v$ r7 t* z9 v" e% s
.text:24BC2E60 call dword ptr [ecx+8]
) I; {& O. u& C% x9 Z
.text:24BC2E63 push [ebp+hLibModule] ; hLibModule
( q; e& u# Q) t0 |% H
.text:24BC2E66 call esi ; FreeLibrary
! @: K( D5 v: b$ L1 ]
.text:24BC2E68 push offset aCouldnTCreates ; "Couldn't CreateSurface\r\n"
# A# ~1 Q) r8 {( H4 t
.text:24BC2E6D
& k) ]$ o) K2 a2 f$ n/ d, K
.text:24BC2E6D loc_24BC2E6D: ; CODE XREF: sub_24BC2CD2+38↑j
. Q$ _8 P+ \; O+ N- R
.text:24BC2E6D ; sub_24BC2CD2+59↑j ...
0 Y5 b. W7 a3 O. u0 U
.text:24BC2E6D call ds:OutputDebugStringA
. f8 |, p6 U, V3 ?" I
.text:24BC2E73 xor eax, eax
$ h& N/ R5 A2 C! v
.text:24BC2E75 jmp loc_24BC3011
6 D# S* \4 t. e
.text:24BC2E7A ; ---------------------------------------------------------------------------
复制代码
3 Y: Z5 \0 a1 G9 m
# ^7 ~# E8 _6 U
2 K+ s# C: W) }2 p, q5 o
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2