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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 10:49 编辑 9 E% I1 O$ I0 p! H7 ?3 |8 j" }0 _

9 R/ ]% z, ], @/ N! V/ c3 [  d! R这个游戏是opengl引擎的,对opengl的初始化主要是在vision71.dll里做的。经过grep文字检索之后,确定这个游戏没有调用 glGenLists和glCallList这2个函数来用于字幕显示。
  [( T/ L; k0 l# g* V
% {- K8 F9 b, W; D& ?dxwnd窗口化之后,用cheatengine 检索内存字符串(注意,有的字符串在内存有2份,对后1份下断点才有用),
; W5 f4 P2 ~* G' K( ^) P2 |随后下断点。在以下地方断下。
" [; [1 d7 U1 r7 x0 O; o" |0 U0 _
. P0 R* [2 {6 k8 O, V: V
  1. Operation Wintersonne.exe+CE883 - F3 A5                 - repe movsd
    : b' A* Z4 A! D6 U* H6 l4 i
  2. 004CE883
复制代码

* g' @; V; f* j) Q. t) P/ `4 D+ ^5 H1 n
用ida pro查看之后,发现是个底层方法。% F) q* h+ V& Z, B8 h7 `* Z
真的显示函数应该是调用它的上层方法。- M. m. h- E  P$ s* c
  1. void *__cdecl memcpy_0(void *a1, const void *a2, size_t a3)' {9 }- n; |+ Y
复制代码
: l, V1 n# O3 R& w

# i( B1 M4 m+ @; i& P+ c( |这个方法看着蛮像的,也许就是它,待日后修改代码测试
# o4 [5 y- H7 _- A. S' Q" O% ]3 H; ~% k

  1. ) D+ k! S8 o) l: Q
  2. int __thiscall ATL::CSimpleStringT<char,0>::SetString(_DWORD *this, void *a2, size_t a3)
    ) [& m7 B4 V0 _
  3. {
    , b: _* ^' U2 l) Q3 C7 E
  4.   unsigned int v4; // edi
    + ?* ~* G( m- b3 p# D) x6 X& J" D
  5.   char *v5; // esi
    " b7 S4 ?" v7 k# E7 @7 t) H
  6.   void *v6; // eax" E" n9 v9 \; B- H6 b
  7. & |# g9 E9 }- Z* L" J- a$ S2 I
  8.   if ( !a3 )1 T" ~! s; s6 d8 N5 v  J' h
  9.     return ATL::CSimpleStringT<char,0>::Empty();3 H9 C# h7 c' w6 T! j3 I
  10.   if ( !a2 )7 B* [+ i1 Y9 M  K  Z
  11.     unknown_libname_180(-2147024809);/ [) z/ X- G4 i* O$ `0 E
  12.   v4 = *(_DWORD *)(*this - 12);( w' v8 z0 E7 c
  13.   v5 = (char *)a2 - *this;
    6 k( L) T3 \5 Q# J6 d, h
  14.   v6 = (void *)ATL::CSimpleStringT<char,0>::PrepareWrite(a3);
    8 W" @+ ^9 r! O& b: s& A& ?# V
  15.   if ( (unsigned int)v5 > v4 )( i0 L' @& N; f8 j/ I  }. C
  16.     memcpy_0(v6, a2, a3);! U8 l8 H- `" n: ]( a6 f& e
  17.   else0 z- _5 ?2 i* V" U# N
  18.     memcpy(v6, &v5[(_DWORD)v6], a3);
    * W: R4 V! |& ]  J5 q
  19.   return ATL::CSimpleStringT<char,0>::SetLength(a3);
    5 a" P; D; C: s' s- [* {
  20. }( ?$ n( K9 A# J( R
复制代码

4 U! H% h- }0 t" |3 N3 X, E4 s0 S4 ~
  f% h( V8 g! Y3 I1 i; B  h% Y' P" ~1 Z+ F; j' k8 M- p5 o
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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