设为首页收藏本站官方微博

建议 【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字...

[复制链接]
查看: 413|回复: 0
打印 上一主题 下一主题

[建议] 【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字...

跳转到指定楼层
楼主
发表于 2023-8-26 18:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字...

本帖最后由 shane007 于 2023-8-27 10:49 编辑
8 f% Q) F6 E  S2 `! a' e4 P' x8 T( N3 m" j$ K
这个游戏是opengl引擎的,对opengl的初始化主要是在vision71.dll里做的。经过grep文字检索之后,确定这个游戏没有调用 glGenLists和glCallList这2个函数来用于字幕显示。1 x& F$ Y! |( ?2 Z! q' i" V( H
0 p0 e' y7 l% t1 a: v* b* Y. |
dxwnd窗口化之后,用cheatengine 检索内存字符串(注意,有的字符串在内存有2份,对后1份下断点才有用),
. P+ }. h* H3 u. t  o随后下断点。在以下地方断下。
+ `( u' Y: H: V8 ?  Z5 b; r" V6 k5 l- i4 J
  1. Operation Wintersonne.exe+CE883 - F3 A5                 - repe movsd ! t; z  z( J/ w4 M' [: ~
  2. 004CE883
复制代码
4 k) r2 F" N+ e
5 N2 }1 l1 p6 j
用ida pro查看之后,发现是个底层方法。
0 h  B. w1 R8 ~/ r真的显示函数应该是调用它的上层方法。
" s% K( V% j! [6 p8 E, T4 K/ S
  1. void *__cdecl memcpy_0(void *a1, const void *a2, size_t a3)
    ' r# W8 V# h) X. u! Z
复制代码

: R8 p  q9 M8 ^8 ?* P8 H5 X) G  ~# T- q  D! m8 r0 ?" A
这个方法看着蛮像的,也许就是它,待日后修改代码测试2 F5 L4 [. ]; U& p" y1 F: `& `

- q$ E, f7 A0 _
  1. : X! w5 _7 g3 u' a& B- s+ \
  2. int __thiscall ATL::CSimpleStringT<char,0>::SetString(_DWORD *this, void *a2, size_t a3)7 s3 b# I, r5 E+ l
  3. {7 J, D+ F" @8 @7 P- V! e8 ?
  4.   unsigned int v4; // edi: O( c) h& S, k( i
  5.   char *v5; // esi
    $ v! u; j  D7 o
  6.   void *v6; // eax8 m* }. t3 ^( {, B

  7. 6 j; t2 U& O; O- `: }
  8.   if ( !a3 )
    8 R' I2 Q) Z4 W0 r) l3 A/ g9 S) O
  9.     return ATL::CSimpleStringT<char,0>::Empty();
    : f. {; w' R# L
  10.   if ( !a2 )
    # Z8 f9 `! D% r! j1 J3 l
  11.     unknown_libname_180(-2147024809);
    5 j; K: ~5 n8 \* @! J6 @6 o
  12.   v4 = *(_DWORD *)(*this - 12);& {. q; `1 K8 q! ~
  13.   v5 = (char *)a2 - *this;
    ; K- D' ?8 y% @) t  x1 D9 d8 B# h
  14.   v6 = (void *)ATL::CSimpleStringT<char,0>::PrepareWrite(a3);" Z! ]3 T- G7 ^1 F6 j
  15.   if ( (unsigned int)v5 > v4 )& z- |# G* Y( G! M) Q0 [" g2 z. M
  16.     memcpy_0(v6, a2, a3);: a  `; J& ^) F# F" e
  17.   else
    % T0 a# R7 `2 k
  18.     memcpy(v6, &v5[(_DWORD)v6], a3);% @& ]! c* R7 o9 }
  19.   return ATL::CSimpleStringT<char,0>::SetLength(a3);
    ) |4 ^7 N4 |) ^. K* a+ U
  20. }; l+ C$ N# u: \1 r
复制代码
( P# Z) S0 u6 {( y2 U6 j

+ [0 B; l8 X& }6 P4 h2 ?8 ]: v+ \5 w3 ?( q1 w3 M5 n" c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表