本帖最后由 shane007 于 2023-8-26 16:32 编辑 / P1 M7 P1 c2 y( @. O/ Z
' \0 a" `, x. ~这个游戏以前分析过,这次再写仔细些,4 M" y3 t5 G- g* g; w
CreateDevice应该就是以下这处了,我用ida pro的F5功能看了一下伪代码,更确定了。
( a8 l5 F! P% l5 q4 e/ L9 I这游戏构造比较简单,CreateDevice是在exe文件内完成的。dxwnd窗口化成功。8 L+ K( u1 B4 j% d6 B
/ M# u* |. J4 R$ k, S- X. }
- .text:0041641A push ecx9 i6 @( Q1 D/ F7 x
- .text:0041641B mov [esi+90Dh], dl
* q" e+ U* n5 Q: a0 f j1 O - .text:00416421 mov ecx, hWnd
; @: d+ v) _6 s9 S7 g" B1 p - .text:00416427 mov edx, [eax]) K: m5 |" e4 _- z! j
- .text:00416429 mov edx, [edx+40h]
! F% C- v6 h& G+ G$ { - .text:0041642C push 40h3 L+ y5 X7 L' {
- .text:0041642E push ecx/ v) n- K( x9 a0 }6 m8 h1 `
- .text:0041642F push 1: V/ w5 P/ ~) ~: p+ ?+ M) j
- .text:00416431 push ebx$ z7 {# a2 P, s0 v/ Y" _
- .text:00416432 push eax3 g* U; S8 U7 Z& @1 z5 F
- .text:00416433 call edx
复制代码- 8 {8 X, X0 M5 l P" h, ?
- int __thiscall sub_415FF0(char *this)$ u- m& f. ^7 k0 T' J8 M
- {" O' ]) W: T$ W$ @
- char *v1; // esi
6 ]$ _# @) O. n, J1 y+ ^: j$ ?# X - FILE *v2; // eax+ S) J8 i8 y" t
- IDirect3D9 *v3; // eax
* V( y5 l! S# E$ W1 F. _ - const char *v4; // ecx
9 W$ k- n: ~- \ - const char *v5; // edi& O- O$ S$ W- |2 ^ t
- const char *v6; // edx
; o, Y7 \* S/ n0 F N- e; o; q) e - const char *v7; // eax. r% q6 M. Y; c( l! R# b
- FILE *v8; // eax) l/ c, t1 g& W( ?9 u, e
- signed int v9; // ebp
" k* I1 R6 y9 O1 z/ | - const char **v10; // eax/ r3 p: s/ ]! p8 V3 r
- double v11; // st7
; B! M1 k# |/ `" \' d - double v12; // st6! g3 ]% V1 T! d( }" f& g
- const char *v13; // ecx
7 T9 n3 V$ B5 @ C1 Z1 D3 M; `9 C - FILE *v14; // eax
& k4 D) \9 r3 I1 b# S& g5 z/ A - unsigned int v15; // eax
4 ~. w$ l M9 {) F- z - int v16; // ecx3 ?- Y% g, I1 ~4 q* x+ n/ k( t7 [8 s8 L
- FILE *v17; // eax; m( v* o' `8 e
- int v18; // eax
8 h, j7 M# P6 e& u - bool v19; // zf
. M" H! |3 J* K3 Q$ T2 |; @ - int v20; // eax! h0 d0 i! H$ T) M
- unsigned int v21; // edx( p( C* A$ l+ |- ]; Z [+ Q
- bool v22; // sf
/ }: S; ]: x& @; @: t - int v23; // eax
+ Q# L- x) n3 B5 U5 J% R9 M: I7 w - int v24; // eax" V) h( [) X) R% y! V
- int v25; // ecx
# P1 }' N) ?7 T% ?8 m8 R - int v26; // eax: H' D/ w" Y7 b+ {
- int v27; // ecx, P. F1 L* c; s& y$ }4 g% M! d
- const char *v28; // eax, c& ?8 d1 v9 Q: B
- const char *v29; // edx
+ L, r# {2 y+ V k% e9 u: H - FILE *v30; // eax% u1 [& s2 |; s9 ^
- void *v31; // eax2 d0 O/ i) e: U$ N# ^9 h" ^
- double v32; // st7
% t; I0 w7 m3 z6 ^ x - _DWORD *v33; // esi- Q5 f% \+ b2 o, ]- w0 H( N/ p/ h& n
- float *v34; // eax
- b6 J! n# y; d0 x3 D - float v35; // ecx6 m7 F% [6 ~: g: O8 t1 J
- float v36; // edx* N; S& i: m# ?7 `% N3 h4 F
- float v37; // ecx. o' g: a5 g& y8 \- r
- float v38; // edx: A# |# }& z1 y/ j! }; x. {
- float v39; // ecx. `2 X7 X& l2 f6 ~( m
- float *v40; // eax
8 g- @% L1 d6 ^6 R - float v41; // edx* P+ l7 O3 m& S/ t6 A w) b8 G
- float v42; // ecx
4 `7 m8 b) \) V' ` - float v43; // edx& B- A8 Y! c8 w* q* L0 z; s, U8 o
- float *v44; // eax
9 ]" L% M. {; x6 m3 `4 O1 Q8 } - float v45; // ecx
1 ?2 P0 { S: U b# d7 ^+ ^4 Y- \ - const char *v47; // ecx* B' l( y: t. O- g
- const char *v48; // ecx
9 a k" J/ q! T1 b2 ~( b& h5 R - signed int v49; // [esp+A0h] [ebp-5Ch]8 T/ Z, f, g4 R$ Q1 d9 b' u, z
- const char *v50; // [esp+A4h] [ebp-58h]
5 M" D4 }5 r3 P9 z - const char *v51; // [esp+A8h] [ebp-54h]
; I l4 s. U& Y4 r; e! l3 R8 R - const char *v52; // [esp+ACh] [ebp-50h]
1 ^: V! a6 u8 s; v9 z - _DWORD *v53; // [esp+C4h] [ebp-38h]
9 S8 X4 k" o: W6 j$ M( L- T7 m - const char **v54; // [esp+C8h] [ebp-34h]: z: ?2 W* t+ B) o3 U2 N: @
- float v55; // [esp+CCh] [ebp-30h]
. N: h+ x' i* l) v/ F - const char *v56; // [esp+D0h] [ebp-2Ch] C/ j! X6 C1 v2 |5 q7 u. R
- float v57; // [esp+D4h] [ebp-28h]* |+ O8 z: D$ u2 z2 z
- float v58; // [esp+D8h] [ebp-24h]0 g' k1 [, ~. G' i$ P7 J
- float v59; // [esp+DCh] [ebp-20h], e0 f' R& s/ u _
- char v60; // [esp+E0h] [ebp-1Ch]
) q0 p/ V+ y- k2 ?: T; ` \ - int v61; // [esp+ECh] [ebp-10h]
$ K0 M1 ~) P8 s9 R; h - int v62; // [esp+F8h] [ebp-4h] Q) z$ D% E- P/ @3 X/ I
6 g" n+ q' g1 {: O, @- v1 = this;+ P& \! }6 d# S- L+ ~4 `
- v2 = (FILE *)sub_4D7E8F("Initializing graphics...\n");* H! P" U' ?" h5 D4 H* G2 K: d K
- fprintf(v2 + 1, v52);
8 ^0 d ]: g; p5 b - *((_DWORD *)v1 + 492) = 0;# i+ [ t8 k' F" [9 P4 V
- *((_DWORD *)v1 + 609) = 0;
0 D9 d5 S1 ], F/ W! z - *((_DWORD *)v1 + 611) = 0;0 r# s8 W5 ~, V
- *((_DWORD *)v1 + 610) = 0;4 l5 ]- i/ i1 v, x( E4 U+ n
- *((_DWORD *)v1 + 613) = 0;
% G5 f% n' a4 W8 T - *((_DWORD *)v1 + 612) = 0;9 W9 m& K8 q5 T. d. Q' G
- *((_DWORD *)v1 + 614) = 0;; \8 c' G, W& T4 A
- *((_DWORD *)v1 + 601) = 0;6 v9 N: m: l6 B: Z T6 L7 f2 b
- *((_DWORD *)v1 + 600) = 0;7 b7 _- O2 n4 \+ |/ f! {
- *((_DWORD *)v1 + 615) = 0;# B1 a9 v, H8 q
- *((_DWORD *)v1 + 395) = 0;% j, Y: {4 _+ g5 Y3 B6 `
- *((_DWORD *)v1 + 488) = 0;7 x, Y# K% _$ p, v" ?' c: g6 S0 [
- *((_DWORD *)v1 + 486) = 0; x! X, B' X0 W0 Y9 o& a! g
- *((_DWORD *)v1 + 487) = 0;
4 s- b. `8 D6 m0 [: p - *((_DWORD *)v1 + 489) = 0;
+ v6 K- U3 @: j+ F4 } - *((_DWORD *)v1 + 491) = 0;
/ w9 H0 c, \% w' ~, K$ }+ Y/ n - *((_DWORD *)v1 + 514) = 0;
% M- G. k/ V7 ]* ?8 O6 A; G. U3 }4 o& y - *((_DWORD *)v1 + 597) = 0;, A: E6 c. C5 e, a
- v53 = v1 + 1968;
5 n$ x7 m3 }4 o5 O$ ] - *((_DWORD *)v1 + 498) = 0;
$ a: l6 w3 T& g. T$ u4 ? - *((_DWORD *)v1 + 499) = 0;7 U9 @5 B4 ?5 D, q! r
- *((_DWORD *)v1 + 500) = 0;4 X! p5 j' r2 g2 Q
- *((_DWORD *)v1 + 501) = 0;
. F8 q& u% `) G - *((_DWORD *)v1 + 502) = 0;
/ h2 P0 w. S4 y( w# d# @ - v52 = (const char *)32;
6 i; W: M$ @' Y7 s5 a! u. |* J* A - *((_DWORD *)v1 + 578) = 0;2 J4 ^$ J. B4 w# X, Y+ d
- v1[2316] = 1;- N( w/ i: |) C; ?. m( b4 [
- v1[2476] = 0;
: C& u4 E5 R b, L - v3 = Direct3DCreate9((UINT)v52);
$ y. k k, W% e6 U; R' s5 U+ {; K$ s - *((_DWORD *)v1 + 384) = v3;
# b7 Q7 Y. M$ J4 c - if ( !v3 )# }& |: `4 i. W/ R5 \+ s- u/ `
- {0 G2 U0 D2 z) ?# D9 g* Z
- v5 = v56;
5 w* b9 H& ]( @ \/ J - goto LABEL_27;0 Y8 c! R; F( e3 B$ `* x6 t
- }
. b9 l3 L5 p R( T. J( _0 f1 L - v5 = (const char *)v3->lpVtbl->GetAdapterDisplayMode(v3, 0, (D3DDISPLAYMODE *)&v60);+ R! U% f; G( s9 \9 x4 d( x
- if ( (signed int)v5 < 0 )4 s$ b5 C* `8 g2 n( Z+ H! P H0 J; s
- goto LABEL_27;6 O, M, \0 } c3 I9 ~
- (*(void (__stdcall **)(_DWORD, _DWORD, signed int, char *))(**((_DWORD **)v1 + 384) + 56))(+ b. W7 c6 {' h# \2 E
- *((_DWORD *)v1 + 384),
1 W+ M3 D' ^" h4 E. m# a - 0,
- \0 w& K0 l3 R5 |( b# P# r* w - 1,
% `% _/ r% L! X* \# S( V - v1 + 1640);
% F: @$ d$ O: I' r" R1 z" r - memset(v1 + 1584, 0, 0x38u);
! m7 K6 }+ J: H* r0 h - *((_DWORD *)v1 + 404) = 0;9 n: @5 m2 q/ p
- *((_DWORD *)v1 + 402) = 1;
+ q7 X. I7 Y: N% w - *((_DWORD *)v1 + 403) = hWnd;. W! U- n9 e% E) `/ w0 n/ |
- *((_DWORD *)v1 + 407) = 0;7 G- \5 K# l4 |/ X/ A: _, Y
- *((_DWORD *)v1 + 399) = 1;
; _$ r L6 b- F! C; X - *((_DWORD *)v1 + 398) = 21;
! z" ^$ v7 l8 f6 k - *((_DWORD *)v1 + 405) = 0;
7 @( _" m2 {1 u8 ` - *((_DWORD *)v1 + 522) = (unsigned __int16)word_558176;9 v& {7 j' m6 N' r
- v6 = (const char *)word_558174;9 A# E f4 E4 J, P! V
- *((_DWORD *)v1 + 523) = word_558174;
0 @& Q1 H. P }9 A3 @ - v7 = (const char *)*((_DWORD *)v1 + 522);
5 _" b9 }7 v( J7 c8 A3 G! O/ h* \ - v52 = v6;/ m0 `7 S4 x6 c$ j$ ~: q
- v51 = v7;
/ t/ P1 ^. `% K0 }/ `: {; p8 G - v50 = "Screen resolution is %d x %d.\n";% O8 t6 `% K# H/ Q( I7 w: A
- v1[2076] = *(_DWORD *)&word_558174 == 67109632;
$ P. q( C- P5 K' Z4 A - v8 = (FILE *)sub_4D7E8F(v50);
0 x! u. k' m- b+ ]) _/ t/ t3 D5 i! X - fprintf(v8 + 1, v50);! x/ G1 I! g- B
- v9 = *((_DWORD *)v1 + 522);
N: l' t" _$ h: q1 I- U - v54 = (const char **)*((_DWORD *)v1 + 523);! L" Z; B% c. }& y
- v10 = v54;( h6 g+ ~- W0 i x L/ D
- *((_DWORD *)v1 + 396) = v9;* p% ]$ }0 x& Q# _" Z0 W0 a3 Z
- *((_DWORD *)v1 + 397) = v10;& N% W) w* V+ S9 t5 h+ ?; M
- v55 = (double)v9 * 0.0009765625;
& F% q; } b/ \- C3 P - v11 = v55;
# g5 m p! n, M W5 i N6 B& L' h' n8 K - *((float *)v1 + 520) = v55;
7 n) P: B# P2 u* c0 [ - v55 = (double)(signed int)v54 / 768.0;
6 m6 h3 `5 y9 N- Z, e1 Y# d. X# D9 W - v12 = v55;
" @! l) D0 x) Z% K; D7 R - *((float *)v1 + 521) = v55;" D! u7 r' I- B- }9 Y, U4 M- H9 {0 w
- *((_DWORD *)v1 + 524) = (signed int)(v11 * 1024.0);
* D; ^9 W0 o: ]6 P7 ` s2 H - v52 = (const char *)1;2 a1 Y1 u7 v+ Y; B" f5 f+ c! g) u
- v51 = (const char *)(v54 + 11);
" K! h1 p6 H2 S - v50 = (const char *)(v9 + 6);
, U. |9 F- H6 F0 _. x. r - *((_DWORD *)v1 + 525) = (signed int)(v12 * 512.0);
! H6 I( n6 a; Z - *((_DWORD *)v1 + 515) = 0;4 ^/ O% T9 s* j/ w& w# k4 Q
- *((_DWORD *)v1 + 517) = 1024;- r+ y) U7 L4 }2 d
- *((_DWORD *)v1 + 516) = 128;6 K0 f9 b9 }" x( B' @$ g
- *((_DWORD *)v1 + 518) = 640;" ~, ]/ j# Q$ J/ H) ^! {/ J
- MoveWindow(hWnd, 0, 0, (int)v50, (int)v51, (BOOL)v52);* K- @3 F, h' ]0 I
- if ( (*(int (__stdcall **)(_DWORD, _DWORD, signed int, int, signed int, signed int))(**((_DWORD **)v1 + 384) + 48))(
4 s5 F& r4 l+ u0 }" j# R8 U" M - *((_DWORD *)v1 + 384),
) m" k% Z# _2 g - 0,
* r2 x" b% t% r v: z - 1, @4 a8 K+ j* `. m5 u d3 |
- v61,
4 r, n# |8 |; J$ o9 f$ V - 21,. k X7 f3 H& u$ G6 x, O
- 75) < 0 )
, _1 I0 g, d5 A4 F# P8 H: l - {
6 {% g* W: O3 u - v52 = v5;, C- @, {9 _6 [+ m
- v51 = v13;
0 r& V0 {! l* g5 c2 P9 I - v55 = COERCE_FLOAT(&v51);, @3 ]; G4 F% j( ^9 u
- sub_456DD0("Direct3D initialization failed. No appropriate Depth/Stencil-Buffer-Format found.");, Z+ ^0 y& n# D$ t* k4 X# \3 o- R% G
- v50 = v47;) E6 j0 c1 r4 m' u
- v54 = &v50;
4 p; i6 h8 H& b: K1 z+ q, a' y) E ? - v62 = 0;
( ~- L+ p5 [; g - sub_456DD0("cCougarGraphics::cCougarGraphics");
+ u, x, A; }) R& L- ]; L( |7 h - v49 = 118;
6 K; I, `' [1 H+ {: L/ P - goto LABEL_28;
( Z% Y6 c7 U% x: c: I - }1 |1 X- k7 a! f7 G$ t( ?4 q
- v52 = "Depth/Stencil Buffer is D24S8.\n";
+ s7 u3 v( @+ P4 x! R; f( I9 ] - *((_DWORD *)v1 + 576) = 24;
- t* | n# p7 o: j9 l, s7 k- F - *((_DWORD *)v1 + 577) = 8;% @# T& R! V* C# k v9 X
- *((_DWORD *)v1 + 406) = 75;
3 N+ w' X$ B) G A! _& V$ F P - v14 = (FILE *)sub_4D7E8F(v52);0 N* p& b0 U8 d8 K7 w! n
- fprintf(v14 + 1, v52);, t: o) d) N+ ]" d& r& S
- *((_DWORD *)v1 + 409) = 1;; Y! `# K; I$ y, A
- if ( dword_558178 != 4* @. J% E9 S4 a) ?, q
- || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
& R; O' F9 _$ a: P' O# l - + 44))(
0 N) h4 `' ]8 v) C4 F - *((_DWORD *)v1 + 384),
- ], `) C/ C' j* Z& E8 y X - 0,
+ ~6 C' u. R+ T+ X0 H8 l) _+ ] - 1,
P5 P R2 H5 s8 m - 21,9 n; D6 r7 g$ o
- *((_DWORD *)v1 + 404),
& ~) `% Z+ S | - 4,
* }$ g% p6 C) w( b - 0) )% T' N' \/ t3 w( l* `
- {
% b* N$ j( B8 z* a0 E - if ( dword_558178 != 2
% r6 E2 ]. @0 O- Q8 ?+ K3 a, R3 i - || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
4 o0 r9 j* f5 m - + 44))(
+ u. v S: b" v6 N - *((_DWORD *)v1 + 384),
" C# ^0 V$ | s; e" G - 0,
R7 s( N5 b/ B3 p0 L& e - 1,* w4 j+ E2 n5 { ^% K/ Q/ b! U
- 21,% i1 g/ V/ @0 t4 l& M
- *((_DWORD *)v1 + 404),
4 j* Q0 F4 {* @" m4 B' V - 2,
E. z& J/ N) c0 l - 0) )
- U7 T1 @ ^5 g/ \) M - {& O" T- e' B5 w0 q+ y5 t' o; K
- if ( (unsigned int)dword_558178 > 0
, F, t! l7 Z- t3 v" R# ] - && !(*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, const char **))(**((_DWORD **)v1 + 384) + 44))(& I! g$ x$ _9 N0 q9 c `, H
- *((_DWORD *)v1 + 384),1 Q5 ]8 l) \6 {7 c8 p* V: T
- 0,% {- ^& n3 R' q% I2 H
- 1,
$ ^" j% ?3 J9 @) X - 21,+ J' B* b0 @. i! m. x5 Z0 _
- *((_DWORD *)v1 + 404),
; k) s7 e; m1 g5 I# d - 1,. Z' a. n3 I; [. a8 \: G
- &v56) )
: F3 o4 ^: n, R q - {
3 Q' l# e8 T$ a3 u% L* g7 ^ - v15 = (unsigned int)v56;$ [5 F8 I# |: r7 j) f! U
- *((_DWORD *)v1 + 400) = 1;
3 X/ u% ], F* D, `' m& ~ - v16 = dword_558178;
- d/ B E% Y" w+ R8 j# g - if ( dword_558178 >= v15 ) e0 T* g! _! x+ P4 f3 h' D
- v16 = v15;" d# Z5 l" }% `- ~7 R: I% H
- *((_DWORD *)v1 + 401) = v16 - 1;! Y& H' P1 D7 p" g
- if ( dword_558178 < v15 )* c; G- n% ?8 U2 \! D
- v15 = dword_558178;, K0 a6 D, I, F# R1 ]
- *((_DWORD *)v1 + 578) = v15;; d" S' T1 ]% F# H. H* q7 L
- }& e: m" z8 @. |1 M
- }# m1 r- z8 r( o/ r1 i8 J
- else
! d! W. _9 W* S - {5 w* a6 D) \% X; u0 J% U3 e
- *((_DWORD *)v1 + 400) = 2;
# f$ T% r, r, x- \ - *((_DWORD *)v1 + 578) = 2;
! N t# S- Z/ A0 t" T( b" {, Q - }4 X$ D! K5 ~; z/ u( P( h
- }+ k! N$ O, V/ c/ g% _7 p
- else, @5 g a- E3 l) a
- {
0 `$ }% B9 E7 B; B5 O - *((_DWORD *)v1 + 400) = 4; Q9 ]! a* ?9 ^& Z& ?: T
- *((_DWORD *)v1 + 578) = 4;
$ t- h) I) b2 x( u! O5 z; N# q2 F - }* }4 B% I" ?! w, [
- v52 = (const char *)*((_DWORD *)v1 + 578);
% A1 \# g' v, d1 r0 Y+ k+ E- q - v17 = (FILE *)sub_4D7E8F("AntiAliasing is %d.\n");
7 O* l, ^4 B4 f) d3 ^1 B( K* c - fprintf(v17 + 1, v51);
- I3 e6 g' }" H5 e8 Q# @ - v18 = *((_DWORD *)v1 + 384);9 }/ u! r9 A7 ~2 ?& G: K& _1 A
- v19 = *((_DWORD *)v1 + 578) == 0;
) S/ d3 N" r) ~" M% p. H/ y - v52 = (const char *)827611204;1 J: B# y: j- }: }/ @! Q
- v51 = (const char *)3;
F6 d3 e2 a+ | - v50 = 0;) [# K$ f' c$ b6 i( a' T
- *((_DWORD *)v1 + 402) = 2 * v19 + 1;
& C: t& I3 t& E+ @0 g6 M - v20 = (*(int (__stdcall **)(int, _DWORD, signed int, int, const char *, const char *, const char *))(*(_DWORD *)v18 + 40))(
6 J4 q6 x8 S% z" I9 f6 j1 I - v18,
' P; t+ D: _" z( F, A- A! S7 N - 0,
- d( s+ x1 |# A( I! l" { - 1,
% {- A$ r$ U+ @) I5 q J - v61,
C" H5 T( e/ \2 h9 A - v50,' _4 M7 O& B. P* A
- v51,
w6 ~0 L/ |5 F1 O! d5 D/ w - v52); S- ~) a! _1 R; d1 i# N: H
- v21 = *((_DWORD *)v1 + 425);$ O, g% P, h( A7 S
- v22 = v20 < 0;
R ]- t# ]' u1 k' m. a5 g. C - v23 = *((_DWORD *)v1 + 384);
; |; E4 i/ x# C. S" _5 w - v1[2316] = !v22;
T# J& y5 T9 v6 T) a - v52 = v1 + 1540;
$ L) N: x6 E- {9 l/ [2 Y9 r - v51 = v1 + 1584;$ t& M5 D [8 C2 S# {; U8 @9 ^
- v1[2317] = (v21 >> 14) & 1;
0 G3 W$ y! v; d0 C - v5 = (const char *)(*(int (__stdcall **)(int, _DWORD, signed int, HWND, signed int, const char *, const char *))(*(_DWORD *)v23 + 64))(5 H) N2 y1 u: X! g8 z; A' g B2 V
- v23,
) D y* ^+ n* R - 0,
) B2 Z! \: ^5 q - 1,
; m' r% m: u5 M J: | - hWnd,
+ x- }8 R K4 e+ S# q - 64,
7 Y0 P# i u& u# S5 j - v51,$ a7 }1 K6 I) N+ \' z- b
- v52);! L: A8 G" c' |9 q# I( P3 Y
- if ( (signed int)v5 < 0 )4 v" J4 A4 O2 x7 d, V
- goto LABEL_27;
1 n9 a& [" E4 S' C: I) ]& } - if ( dword_558180 && ((v24 = *((_DWORD *)v1 + 425), v24 & 2) || v24 & 0x100) )4 P# I* ~1 W: [3 n3 F( g/ X
- {
# |2 J6 M* o5 p- m - v25 = *((_DWORD *)v1 + 609);+ ?. z1 ~! z+ \* k; F+ g" l1 [
- v26 = sub_418670(*((_DWORD *)v1 + 522));
& n+ q; m3 f3 w" J - v52 = (const char *)*((_DWORD *)v1 + 523);4 q/ M1 m5 N: g7 p' ^& ?+ M
- v27 = *((_DWORD *)v1 + 609);6 `; r( Q0 B2 p8 ]7 T9 E
- *((_DWORD *)v1 + 496) = v26;
1 f. I& Q8 b6 j- `* L - v28 = (const char *)sub_418670(v52);) y/ h4 W3 f7 ^, ^$ s
- }& Q2 L+ [$ L/ I$ m8 A
- else$ j5 S2 z" z8 S( ?% `
- {# a& r4 D8 s* K( ^3 {/ _
- v28 = (const char *)*((_DWORD *)v1 + 523);
! d# ^& Z$ F2 h) v) n2 g2 Q& m - *((_DWORD *)v1 + 496) = *((_DWORD *)v1 + 522);
9 U; W* O! X* i, L1 l2 O" g - }
2 A, h* G8 Z1 p& Q. \1 r0 u% u6 a) l% X - v29 = (const char *)*((_DWORD *)v1 + 496);$ \3 A. ]- \+ q: i
- v52 = v28;2 s/ u4 _$ J! |
- v51 = v29;
$ _ V- V4 t: F% p. e" Z: r3 F - v50 = "PostProcess Surface is %d x %d.\n";3 |- j. t$ N& c# c( r; C
- *((_DWORD *)v1 + 497) = v28;
3 \$ N; A! `& @9 n1 h: g" ? - v30 = (FILE *)sub_4D7E8F(v50);! Q6 S1 [7 B, A) W2 E
- fprintf(v30 + 1, v50);
+ w- P6 h. a! T$ r - (*(void (__stdcall **)(_DWORD, _DWORD, char *))(**((_DWORD **)v1 + 385) + 88))(*((_DWORD *)v1 + 385), 0, v1);0 n) m: y1 L8 e
- sub_413100(v1);
5 C/ z7 m; c5 R" v4 o( e4 S - sub_411D60(v1);
: e( @6 g2 Q, Z - v31 = malloc(0x78u);
8 ~6 D) |5 H0 i! E# W3 } - v32 = -0.5 / (double)*((signed int *)v1 + 522);0 ~/ y i1 p4 J6 ? ^* _
- *((_DWORD *)v1 + 599) = v31;3 ~1 D# O+ j4 V$ `+ H
- *((_DWORD *)v1 + 600) = 0;
$ A8 F( ]! @) q) ]/ p) d% [4 {( n - *((float *)v1 + 526) = v32;
+ D% b2 M/ W" q5 c$ F) h( t& t - *((float *)v1 + 527) = -0.5 / (double)*((signed int *)v1 + 523);5 i) F7 {1 h5 I+ ^3 X( F3 C
- sub_411CC0(v1);) O" U3 ?: m7 Y* J; q0 { d
- v33 = v53;+ d7 V0 U$ n6 k' w1 S, @3 [
- v5 = (const char *)(*(int (__stdcall **)(int, signed int, signed int, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)dword_559B7C + 104))(
, ^4 s5 E, E4 \* w - dword_559B7C,( r+ R+ E# C8 M. V, ?! y
- 80,% b3 {* g# d1 l8 V! C: A' W
- 8,
7 G+ S9 |- ^8 t6 ] - 258,3 D0 ~1 H6 a& V: M0 \$ i# `
- 1,1 }" H3 a7 E# P3 i( L& s: u
- v53,0 R0 ~) D! n/ T: S0 s4 d% g( G3 Z
- 0);, e$ M9 c0 ~' R0 E4 L9 j
- if ( (signed int)v5 < 0 ): _# q, K* [# ?# C/ A5 t
- {
3 I1 [! S5 T$ N - LABEL_27:% ]( q' ~: k3 T* a6 N. A
- v52 = v5;) W/ e# Q3 n4 Q% y4 a
- v51 = v4;" b; k0 ]) p9 p [
- v55 = COERCE_FLOAT(&v51);
: E2 e8 L- t) q x4 [- U" l - sub_456DD0("Direct3D initialization failed.");" U) V; F0 T( W- {( `
- v50 = v48;
* T! t1 |3 I) k0 s2 {5 O - v54 = &v50;
, q5 M! g# U( [ - v62 = 1;
$ {6 `5 I, V7 o1 i/ L! c; V7 m - sub_456DD0("cCougarGraphics::cCougarGraphics");* }4 u; t/ X# U2 u5 h
- v49 = 205;$ C3 M" W: e( L6 G. [1 d9 q2 `6 N
- LABEL_28:
4 ?7 g$ A& }2 r" J - v62 = -1;' q: D# V ]! r. t6 h9 ^
- sub_40CB30(1, ".\\source\\class_graphics.cpp", v49, (char)v50, (char)v51, v52);
9 f( u! N5 q+ \5 ? - }
1 s4 P& i( S9 ^6 @. K2 I - (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)*v53 + 44))(*v53, 0, 0, &v53, 0);6 L0 T8 Y! O4 B" P
- v58 = -1.0;
7 E: \0 X$ V1 ^4 j' c; m - *(float *)v53 = -1.0;; @+ q1 e" {. A* {" h- J% p
- v59 = 1.0;
% G: I! R P; I. v& j - *((float *)v53 + 1) = v58;
% @0 Q4 ?8 w, W, C( _ - v57 = -1.0;
- e5 q# L/ I. S8 ?# x - v58 = 1.0;
O5 z- I2 V- _8 J5 Y: V - *((float *)v53 + 2) = v59; P- {1 s) j g4 D! @
- v59 = 1.0;" J8 K4 I+ ^/ \$ A" v* d8 z. _
- v34 = (float *)v53;
* O+ r2 ]! Z$ V Q3 I - v35 = v57;9 e' X+ F1 M# v! h& S6 G! c& z
- v57 = 1.0;
4 {7 L0 l% ~+ I7 Q5 _ s+ U) E" K - v36 = v58;
% d, m4 ?* G8 o - *((float *)v53 + 5) = v35;
1 F s6 v$ q8 Y2 e1 k/ I - v37 = v59;
" ?: R* K5 }( I. G8 Q/ e - v59 = 1.0;" v7 \. t, \6 ?- r
- v34[6] = v36;
# k1 c& [1 a) E7 B* Q. l0 I - v38 = v57;
& F+ i8 i$ s$ N7 E. H' v. b - v58 = -1.0;" g- ]7 `, u8 ~8 F% f" E
- v34[7] = v37;
& z( m# O& b" ^9 T6 ~# b - v39 = v58;( d! B% j4 R# X( Q4 L
- v57 = 1.0;
- F* Q+ T0 M/ D% E2 G; c; i$ |* a - v58 = 1.0;
0 e! ~7 b' G) o3 r. B4 s5 u* G - v40 = (float *)v53; I1 _; n0 K$ A/ N( _) G
- *((float *)v53 + 10) = v38;
4 e" g; C% _1 h y - v41 = v59;
/ W8 Z0 @- c' C: X2 O - v59 = 1.0;
7 l# P J" d8 G - v40[11] = v39;, |$ H/ U- @+ C6 r& G
- v42 = v57;
% s2 `! }6 g5 A+ I - v40[12] = v41;
& U; t6 g6 O8 c' p - v43 = v58;
9 N0 l A) x) ^2 o* J2 [ - v44 = (float *)v53;
& g2 j7 I! r5 K - *((float *)v53 + 15) = v42;
. H% L5 ]1 `5 R4 X6 ~) r/ {! n - v45 = v59;
1 O) q5 a9 `- V - v44[16] = v43;# M6 U) K; f0 l
- v44[17] = v45;. m8 S5 u. G' N* M
- *((float *)v53 + 3) = 0.000099999997;1 S6 L9 K9 I a$ B/ I
- *((float *)v53 + 4) = 1.0001;
3 m: `7 K: ~! V' { - *((float *)v53 + 8) = 0.000099999997; p( _$ d; r& g
- *((float *)v53 + 9) = 0.000099999997;9 v! D: G z( i0 }/ @6 O
- *((float *)v53 + 13) = 1.0001;1 ~6 W6 ~ J% ]7 n. F9 N
- *((float *)v53 + 14) = 1.0001;# O0 W! ?% t+ A, Z% x8 @" r
- *((float *)v53 + 18) = 1.0001;3 I4 q# Z! i7 Z: A2 m: w( h
- *((float *)v53 + 19) = 0.000099999997;
. [+ j; L) C' a% M- a - (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v33 + 48))(*v33);/ Z3 r% Z" }2 w7 Y# D
- return 0;) r0 _' t G1 i L+ b% l
- }
复制代码
. c0 V' d) y+ L9 Q: p y2 k用Cheatengin寻找一个字幕之后,在以下地方断下" K9 v' W7 U3 H+ n3 v
- <div>ocd.exe+425B9 - 0FB6 D9 - movzx ebx,cl</div><div>004425B9</div>
复制代码 ) }# \: p( c) {
' N. I7 S; _* `7 G5 S4 O& Y
在ida pro下查看,是这个函数,从代码看a2字符像是索引号。
) Q. w3 A/ t! D- j稍后需要仔细分析。字幕显示函数应该在本函数上下。$ N$ A. P3 J; |
- int __thiscall sub_442510(unsigned __int8 **this, int a2)
复制代码 + ^( v8 e+ U* J3 ?) e; B
* v0 W+ [+ H9 ^" J# i. j9 X; e! _# `0 O& M; ]$ Q
|