我正在写入一个DLL,它通过在注入的进程的VMT中更改所需的指针来挂接某些D3D函数。该算法类似于:D3D-> CreateDevice()在注入的DLL中失败
- 获得虚拟窗口句柄。
- 初始化一个笨拙的D3D对象,创建一个D3D设备。
- 获取所需的偏移量(VMT-D3D基址)。
- 销毁D3D对象和窗口句柄。
- 获取注入进程的D3D * .dll库。
- 构建实际的VMT指针(偏移量+基地址)。
- 在进程堆中搜索它们。
- 如果找到 - 将指针更改为我自己的。
它的工作原理的应用,在那里我初始化D3D内完全好,开始引出环再火钩挂程序,但它不会从一个DLL工作 - 由于某种原因而试图建立一个崩溃最后一个错误代码= 126(“无法找到指定的模块”,尽管D3D * .dll正确加载)的虚拟设备。
我知道在同一时刻只能有一个D3DDevice被引用,但在我的测试应用程序中,我可以创建更多1 - 只有1个作品,但我仍然可以抓取VMT。
所以,问题是 - 从EXE和DLL运行相同的代码有什么区别?
这里没有其他的帖子来解决这个问题,我在网上找不到它。我无法发表评论,我想补充我的进展,所以如果我无法解决它,下一个人可以找到他之前的其他人试图搜索的地方。 – 2014-04-17 10:47:48