对d3d9里面的函数挂钩实现透视
#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里面的函数挂钩实现透视相关推荐
- [Excel] 用sumproduct函数实现数据透视表功能
目录 1. sumproduct函数实现销售额统计 1.1 总额 1.2 单分类 1.3 二分类 1.4 三分类 2 其他 假设某公司某年二季度的销售额如下,要求按模板格式需要填报产品销售额. 其实从 ...
- Pandas实现(pivot_table函数)数据透视表
使用pandas中的pivot_table()实现数据透视表.语法格式如下: pd.pivot_table(data,values=None,index=None,columns=None,aggfu ...
- Excel操作:使用offset函数让数据透视表动态更新
一.offset函数 offset函数是一个引用函数,表示引用某一个单元格或者区域 offset函数是以指定的应用为参考系,通过上下左右偏移得到新的区域的引用.返回的引用可以是一个单元格也可以是一个区 ...
- 【转】托管函数的挂钩(完美版)
原文:http://blog.csdn.net/cstod/article/details/6262506 CLR Injection: Runtime Method Replacer http:// ...
- 推荐一款神器,不用写函数的“Excel”,统计数据比透视表还牛!
做业务分析.做业务报表的人都离不开和数据打交道.一般我们要做一次统计分析报告,比如月底的销售业绩汇报,可能就要提前向IT部门提需求,让他们把我们需要的数据取数来,然后他们会写SQL把数据遍历出来,然后 ...
- 驱动开发:内核层InlineHook挂钩函数
在上一章<驱动开发:内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函 ...
- 数据挖掘技术-使用povit_table函数创建透视表
使用povit_table函数创建透视表 准备数据 准备数据meal_order_info.csv,并将meal_order_info.csv数据放到Linux本地/course/DataAnalyz ...
- 刷新table数据_经典 - 一文轻松看懂数据透视表
[导语]也许大多数人都知道 Excel 中的数据透视表,也体会到了它的强大功能,那么 Pandas 也提供了一个类似的功能,也就是pivot_table.因为考虑到直接学 pivot_table 会有 ...
- excel 2010 学习笔记一 Vlookup 函数的使用
有这么一句话说的好:在商用场合里,能证明你会基本的EXCEL操作技巧的两个检查标准就是会不会用VLOOKUP函数以及数据透视表功能,那么今天就来总结一下VLOOKUP的一些简单实用的功能. 1.VLO ...
- linux Rootkit:x86与ARM的内联内核函数Hooking
介绍 几个月前,我添加了一个新的项目.(https://github.com/mncoppola/suterusu) 通过我的各种对路由器后门及内核漏洞利用的探险,我最近的兴趣转向Li ...
最新文章
- h265webplayer
- Spring MVC 框架搭建及详解
- 重要的mysql语句用法
- lua 多条件_【LUA】只需花费你半天时间
- 怎么判断时double和floatc++_安居客堂:您知道怎么选择优质的轻钢龙骨吗?
- Qtcreator快速入门
- 【Android】12.3 在当前Activity中获取另一个Activity的返回值
- Asp.net MVC 示例项目Suteki.Shop分析之---ViewData
- 大佬 Python 对阵新秀 Julia ,谁能问鼎机器学习和数据科学?
- ps命令,性能监控,grep命令
- Windows电脑上最好的3个txt阅读器
- unity中的游戏推出代码
- 【FPGA频率计】基于FPGA的高精度数字频率计的详细设计
- Realtek网卡如何识别具体型号是8111B/8111C/8111D还是8111E
- 【51nod-1521】一维战舰
- WPS制作的电子签名有法律效力吗
- Cisco2960交换机配置(二)
- 批准此iphone 前往已登录iCloud的其他设备来批准这台iPhone
- 泰山OFFICE技术讲座:全网首发:中文字体,字号就是中文字符的宽度
- HTML-做一个网页的注册登记表单
热门文章
- 一位宝石爱好者的零起点建站攻略
- 189邮箱smpt服务器,客户端软件配置-帮助中心-中国电信189邮箱
- html5 输入用户名和密码登陆网址,360路由器登录网址用户名和密码指南
- python极简讲义(张玉宏著)的几处补充说明
- ORB-SLAM Spanning Tree 的作用
- android地图定位到海洋,如何利用卫星导航技术进行高精度海洋测绘定位
- php 保留小数0补位,PHP自带函数给数字前补0或补位
- word文档字不靠边_word怎么调整单元格文字边距表格文字紧靠边框怎么办
- 【线性代数】第一章 1.3逆矩阵
- 非常棒的口才训练方法