You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Windows DLL注入场景下可靠获取OpenGL函数指针的方案咨询

在Windows DLL注入场景下可靠获取OpenGL函数指针的方案咨询

我正在为一款采用**OpenGL核心配置文件(版本>3.3)**的应用开发DLL注入工具,目的是拦截几何数据。我需要在注入的DLL中调用glDrawElements、glGetIntegerv这类OpenGL函数。

最开始我采用了硬编码nvoglv64.dll内偏移的方式,代码大致如下:

typedef void(APIENTRY *FP_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
// nvoglv64.dll中的函数偏移
static const DWORD_PTR glDrawElements_OFFSET = 0x8625A0;
static FP_glDrawElements real_glDrawElements = nullptr;

// 后续逻辑
const char *NAME = "nvoglv64.dll";
HMODULE h_mod = GetModuleHandleA(NAME);
MODULEINFO mod_info;
if (h_mod == 0) {
    debug_output("Fail to get module.");
}
if (!GetModuleInformation(GetCurrentProcess(), h_mod, &mod_info, sizeof(mod_info))) {
    debug_output("Fail to get module information.");
}
char path[MAX_PATH];
GetModuleFileNameA(h_mod, path, MAX_PATH);
debug_output(std::format("OpenGL module found: {}", path));
DWORD_PTR actual_base = (DWORD_PTR)mod_info.lpBaseOfDll;
real_glDrawElements = (FP_glDrawElements)(actual_base + glDrawElements_OFFSET);

这种方式对大部分函数有效,但glGetIntegerv失效了——因为它的实现是在opengl32.dll而非厂商驱动DLL里。

我尝试过用GLAD:

gladLoadGL(); // 没有上下文相关的加载器

但因为缺少glfwGetProcAddress这类加载器回调,这个方法也失败了。

现在想请教:在以下约束条件下,如何可靠获取OpenGL函数指针?

  • 函数可能存在于opengl32.dll(代理库)或厂商DLL(比如nvoglv64.dll)中
  • 处于DLL注入场景,没有GLFW/GLUT这类库
  • 目标应用使用现代OpenGL(核心配置文件)

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 07:49:32