#include "stdafx.h"
HMODULE g_module = 0;              //当前模块的句柄
ULONG_PTR g_ulNewAddress = 0;      //DrawIndexedPrimitive函数地址
UINT g_nStride = 0;                    //需要透视的人物标识__declspec(naked) HRESULT WINAPI OriginalDrawIndexedPrimitive(LPDIRECT3DDEVICE9 m_pDevice,D3DPRIMITIVETYPE type,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount)
{__asm{//前面这5个字节是调试获取的mov edi, edipush ebpmov ebp, esp//跳转去原始的DrawIndexedPrimitive函数mov eax, g_ulNewAddressjmp eax}
}HRESULT WINAPI HookDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice,D3DPRIMITIVETYPE type,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount)
{IDirect3DVertexBuffer9* pStreamData = nullptr;UINT nOffsetInBytes = 0, nStride = 0;if (pDevice->GetStreamSource(0, &pStreamData, &nOffsetInBytes, &nStride) == D3D_OK)pStreamData->Release();if (nStride == g_nStride){//禁用深度来实现人物模型的透视效果pDevice->SetRenderState(D3DRS_ZENABLE, FALSE);}return OriginalDrawIndexedPrimitive(pDevice, type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
}void BeginHook()
{HANDLE hD3d9 = GetModuleHandleA("d3d9.dll");if (hD3d9 == INVALID_HANDLE_VALUE){MessageBoxA(0, "获取d3d9.dll的模块句柄失败", 0, 0);FreeLibrary(g_module);}//基址加上偏移得到DrawIndexedPrimitiveAddress函数的地址,//0x5CD20 这个偏移是不变的!!!其它函数的偏移也应该是不变的ULONG_PTR ulDrawIndexedPrimitiveAddress = (ULONG_PTR)hD3d9 + 0x5CD20;g_ulNewAddress = ulDrawIndexedPrimitiveAddress + 5;DWORD dwOldProtect = 0;VirtualProtect((void*)ulDrawIndexedPrimitiveAddress, 5, PAGE_EXECUTE_READWRITE, &dwOldProtect);DWORD dwValue = (DWORD)HookDrawIndexedPrimitive - ulDrawIndexedPrimitiveAddress - 5;//这里构造jmp xxx_asm{push eaxpush ebxmov eax, ulDrawIndexedPrimitiveAddressmov byte ptr[eax], 0xe9add eax, 1mov ebx, dwValuemov dword ptr[eax], ebxpop ebxpop eax}VirtualProtect((void*)ulDrawIndexedPrimitiveAddress, 5, dwOldProtect, &dwOldProtect);
}BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ LPVOID lpvReserved
)
{g_module = (HMODULE)hinstDLL;if (fdwReason == DLL_PROCESS_ATTACH){DisableThreadLibraryCalls((HMODULE)hinstDLL);//这里设置需要透视的人物模型标识!!!!g_nStride = 100;BeginHook();}return TRUE;
}

没有对任何游戏进行测试,但是写了小demo测试了一下,应该没什么问题的。

对d3d9里面的函数挂钩实现透视相关推荐

  1. [Excel] 用sumproduct函数实现数据透视表功能

    目录 1. sumproduct函数实现销售额统计 1.1 总额 1.2 单分类 1.3 二分类 1.4 三分类 2 其他 假设某公司某年二季度的销售额如下,要求按模板格式需要填报产品销售额. 其实从 ...

  2. Pandas实现(pivot_table函数)数据透视表

    使用pandas中的pivot_table()实现数据透视表.语法格式如下: pd.pivot_table(data,values=None,index=None,columns=None,aggfu ...

  3. Excel操作:使用offset函数让数据透视表动态更新

    一.offset函数 offset函数是一个引用函数,表示引用某一个单元格或者区域 offset函数是以指定的应用为参考系,通过上下左右偏移得到新的区域的引用.返回的引用可以是一个单元格也可以是一个区 ...

  4. 【转】托管函数的挂钩(完美版)

    原文:http://blog.csdn.net/cstod/article/details/6262506 CLR Injection: Runtime Method Replacer http:// ...

  5. 推荐一款神器,不用写函数的“Excel”,统计数据比透视表还牛!

    做业务分析.做业务报表的人都离不开和数据打交道.一般我们要做一次统计分析报告,比如月底的销售业绩汇报,可能就要提前向IT部门提需求,让他们把我们需要的数据取数来,然后他们会写SQL把数据遍历出来,然后 ...

  6. 驱动开发:内核层InlineHook挂钩函数

    在上一章<驱动开发:内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函 ...

  7. 数据挖掘技术-使用povit_table函数创建透视表

    使用povit_table函数创建透视表 准备数据 准备数据meal_order_info.csv,并将meal_order_info.csv数据放到Linux本地/course/DataAnalyz ...

  8. 刷新table数据_经典 - 一文轻松看懂数据透视表

    [导语]也许大多数人都知道 Excel 中的数据透视表,也体会到了它的强大功能,那么 Pandas 也提供了一个类似的功能,也就是pivot_table.因为考虑到直接学 pivot_table 会有 ...

  9. excel 2010 学习笔记一 Vlookup 函数的使用

    有这么一句话说的好:在商用场合里,能证明你会基本的EXCEL操作技巧的两个检查标准就是会不会用VLOOKUP函数以及数据透视表功能,那么今天就来总结一下VLOOKUP的一些简单实用的功能. 1.VLO ...

  10. linux Rootkit:x86与ARM的内联内核函数Hooking

    介绍 几个月前,我添加了一个新的项目.(https://github.com/mncoppola/suterusu)         通过我的各种对路由器后门及内核漏洞利用的探险,我最近的兴趣转向Li ...

最新文章

  1. h265webplayer
  2. Spring MVC 框架搭建及详解
  3. 重要的mysql语句用法
  4. lua 多条件_【LUA】只需花费你半天时间
  5. 怎么判断时double和floatc++_安居客堂:您知道怎么选择优质的轻钢龙骨吗?
  6. Qtcreator快速入门
  7. 【Android】12.3 在当前Activity中获取另一个Activity的返回值
  8. Asp.net MVC 示例项目Suteki.Shop分析之---ViewData
  9. 大佬 Python 对阵新秀 Julia ,谁能问鼎机器学习和数据科学?
  10. ps命令,性能监控,grep命令
  11. Windows电脑上最好的3个txt阅读器
  12. unity中的游戏推出代码
  13. 【FPGA频率计】基于FPGA的高精度数字频率计的详细设计
  14. Realtek网卡如何识别具体型号是8111B/8111C/8111D还是8111E
  15. 【51nod-1521】一维战舰
  16. WPS制作的电子签名有法律效力吗
  17. Cisco2960交换机配置(二)
  18. 批准此iphone 前往已登录iCloud的其他设备来批准这台iPhone
  19. 泰山OFFICE技术讲座:全网首发:中文字体,字号就是中文字符的宽度
  20. HTML-做一个网页的注册登记表单

热门文章

  1. 一位宝石爱好者的零起点建站攻略
  2. 189邮箱smpt服务器,客户端软件配置-帮助中心-中国电信189邮箱
  3. html5 输入用户名和密码登陆网址,360路由器登录网址用户名和密码指南
  4. python极简讲义(张玉宏著)的几处补充说明
  5. ORB-SLAM Spanning Tree 的作用
  6. android地图定位到海洋,如何利用卫星导航技术进行高精度海洋测绘定位
  7. php 保留小数0补位,PHP自带函数给数字前补0或补位
  8. word文档字不靠边_word怎么调整单元格文字边距表格文字紧靠边框怎么办
  9. 【线性代数】第一章 1.3逆矩阵
  10. 非常棒的口才训练方法