试图从我的 exe 调用 DLL 的函数

逆向工程 C++
2021-07-11 16:30:13

我是新来的,我有一个问题要问你们

( C++ ) 我将尝试用一些细节来描述我的情况,以便您更好地理解这一点。这可能很长(呃)但可能有必要向不知道这个(scripthook)如何工作的人解释这一点

我正在玩GTA 5并且有一个由非官方人员制作的名为ScriptHookV .dll的库文件它的主要目的是启用模组,它与游戏挂钩并允许我们(模组制作者)调用游戏的原生功能,例如:VEHICLE::VEHICLE_CREATEPLAYER::PLAYER_SET_WANTED_LEVEL等。(完整列表在这里:http : //www.dev-c.com/nativedb/

但是,这种修改的工作方式是您从(http://www.dev-c.com/gtav/scripthookv/下载 sdk并且您可以使用 sdk 制作自己的 mod,它提供了这些本机功能,因此您可以使用并编译它。

当它被编译时,它被编译为 .asi 扩展名(实际上它是一个重命名为 asi 的 dll),你需要将它放在 gta 5 主文件夹中,当你启动游戏时,scripthookv.dll 和其他名为 dsound8.dll 的文件将需要小心加载那个 .asi 文件

但是,正如您所看到的,它的工作方式是脚本挂钩文件本身将 .asi 文件加载到游戏中并自行执行它们的代码。我想要做的是我想拥有自己的程序,从中我可以使用 ScriptHookV.dll 的本机函数来操作 gta 5 单人游戏,但我没有该 dll 的源代码。

所以我想知道现在该怎么办..

TL;DR:我想通过使用我自己的程序来使用 ScriptHookV.dll 提供的功能来操作 GTA 5 单人游戏,但我没有那个 dll 的源代码

1个回答

首先,您不需要ScriptHookV.dllas SDK的源代码,它提供了修改所需的所有 API 接口函数(在inc目录中查找)。

我没有深入研究ScriptHookV.dll设计,但是如果在其地址空间内不存在(DLL、shell 代码),您将无法从外部操作游戏。

在任何情况下,您都需要某种客户端/服务器实现:

  1. 服务器将是asi文件或任何其他必须在游戏地址空间中的dll,并打开例如一些管道服务器。
  2. 客户端将是您的应用程序,连接到创建的管道。

通过这种方式,您需要为客户端/服务器通信实现自己的脚本语言或协议,或者通过管道预编译脚本让服务器在游戏上下文中执行。

从您的评论来看,从外部应用程序中执行此操作看起来像是过度设计且不太稳定。