我正在尝试对安装游戏“皇帝:沙丘之战”的安装程序进行一些更改。如果你想看看我正在处理的 EXE,你可以从这里的官方安装修复补丁下载这个安装程序的副本:http : //dune2k.com/Duniverse/Games/Emperor/Downloads/Patches(下载“安装修复:”条目,它是 Setup.exe)。
出于某种原因,开发人员决定使安装程序成为全屏应用程序,因此我试图将其修改为在窗口中运行。它使用 DirectDraw API(不完全确定是什么版本,但我认为它是 7 或 8)。因此,我知道函数“SetCooperativeLevel”(https://docs.microsoft.com/en-us/windows/desktop/api/ddraw/nf-ddraw-idirectdraw7-setcooperativelevel)用于在全屏模式下初始化 DDraw 应用程序或窗口模式。
我的问题是我尝试使用 IDA Pro 7.0 和 OllyDbg 2.01 反汇编 EXE,但他们都无法找到对该函数的任何调用。谁能告诉我我是否可以做些什么来帮助其中一个程序找到这个电话?或者,DDraw 程序是否有可能在没有 SetCooperativeLevel 函数的情况下进入全屏模式?
编辑:我试图在下面使用 Defragger 的建议。不幸的是,它没有奏效。我修改了他在下面指出的代码,只是将尺寸更改为 800x600,但它没有改变任何东西。该窗口仍处于全屏状态,并没有出现任何不同:
.text:004619BF mov esi, ds:GetSystemMetrics
.text:004619C5 push 258h ; yBottom
.text:004619CA push 320h ; xRight
.text:004619CF push 0 ; yTop
.text:004619D1 push 0 ; xLeft
.text:004619D3 push offset Rect ; lprc
.text:004619D8 call ds:SetRect
我发现我只能安全地修改“yBottom”和“xRight”参数。如果我修改了“yTop”或“xLeft”,程序就会崩溃。