admin管理员组文章数量:1531251
2024年7月2日发(作者:)
MicrocomputerApplicationsVo1.31,No.7,2015
文章编号:1007—757X(2015)07—0022-05
研究与设计 微型电脑应用2015年第31卷第7期
DirectX 10图形应用程序截获技术的研究
李一天
摘要:DirectX是主流图形API,在多媒体、娱乐等领域得到广泛应用。为实现图形表面的跨进程共享,从DirectX 10开
始使用DirectX图形基础架构(DXGI)对图形硬件进行底层管理。DXGI带来性能提升的同时也给图形应用程序的截获
工作带来困难。为完成DirectX 10程序的拦截,需要同时截获多个图形库的函数。针对此问题,完善DLL替换+Detours
的图形应用程序截获框架,克服现有截获技术的缺陷,完成DirectX 10程序的截获工作,并解决因DXGI、D3D10图形库
间依赖关系产生的进程死锁问题。最后,基于该截获框架,开发出一套单机驱动的多投影显示系统,DirectX 10程序不需
做任何修改就能多投影显示。实验结果表明,使用所提出的截获技术后图形应用程序画面流畅,运行稳定。
关键词:函数截获;Detours;多投影显示
中图分类号:TP393 文献标志码:A
0引言
图形应用程序主要使用两种图形库:Direct3D图形库和
OpenGL图形库。Direct3D由微软开发,在微软平台
(Windows和Xbox)上提供图形应用程序开发接口。
OpenGL定义了一套跨平台、跨语言的图形应用程序编程接
口。由于多数图形应用程序可以在Windows平台上使用
1相关截获技术
Windows API拦截(Hook)的机制有2种,分为内核级
的拦截和用户级的拦截『4_。内核级的拦截主要是通过一个内
核模式的驱动程序来实现,它的功能强大,能捕捉到系统活
动的任何细节,但实现难度也较大。而用户级的拦截则通常
是在普通的DLL中实现整个API的拦截工作,本文讨论的
即为用户级拦截。在Windows平台下拦截API函数一般有
以下3种方法:
(1)修改函数IAT(Import Address Table)表和ET
(Export Table)表
Direct3D运行,本文的讨论限定在Windows平台上,并以
Direct3D为主。
目前大多数操作系统以用户态动态链接库(Dynamic
Linking Library,或DLL)的形式向应用程序提供大多数系
统服务。对于图形服务而言,操作系统通过用户态的动态链
接图形库(opengl32.d1l或d3d9.dl1)向应用程序提供图形绘
制及显卡资源管理功能。
在Window 32操作系统中,可执行文件是基于Microsoft
设计的PE(Protable Executable)格式l2】,如图1所示:
∞s遥符点
pE装裁域
Y.Mao提出DLL替换+Detours的截获技术_1],在不修
改应用程序源代码和二进制镜像的前提下,可以截获D3D9
代码毅
初始化数据
图形库所有函数。从DirectX 10开始,DirectX使用DirectX
Graphics Infrastructure(DXGI)对图形硬件进行底层管理_zJ口
为完成对DirectX 10图形应用程序的拦截,需要同时截获多
j禽入竭数的敬攒信息
输出蠡数的数摧信息
个图形库的函数,加大了截获难度。例如,若想截获图形应
用程序的帧缓存更新(Present)以及绘制函数(Draw),我
图1可执行模块的PE结构
们必须同时完成对dxgi.dll和d3dl0.dll动态链接库的截获工
作。
综合以上情况,本文深入研究图形应用程序的截获技术
以及DirectX 10多媒体绘制引擎的工作机理,设计DirectX
10图形应用程序的截获框架,在不修改应用程序源代码和
二进制镜像的前提下,完成DirectX 10图形应用程序的函数
截获。
为了测试截获技术的性能以及适用性,基于该截获框架,
我们利用已有的多投影显示的几何校正、边缘融合算法[3],开
每个PE文件的文件头都包含了该模块的输入函数入口
地址表和输出函数入口地址表【5JI即IAT表和ET表。只要
把输入表中目标API函数的地址改为替代函数的地址,那么
当可执行模块调用该API函数时就会变成对替代函数的调
用,从而实现API函数的拦截。这种方法比较容易实现,应
用也很广泛。该方法缺点在于无法截获来自模块内部的函数
调用。
(2)修改API函数的入口指针
程序的执行都是在内存中完成的,系统动态链接库
发出一套单机驱动的多投影显示系统。该系统对DirectX 10
(DLL)在程序运行时被动态地载入内存中。而每个API
函数在DLL中都有自己固定的地址,只需要使用Win32 API
函数GetProcAddress就可以得到需要拦截的API函数的入口
程序是透明的,程序源码不需做任何修改就能多投影显示。
实验结果表明,使用本文的截获技术后图形应用程序的画面
流畅,运行稳定。
地址。这种方法需要注意的是,在替换目标API函数之前,
需要先保留API函数入口地址处的前几个指令字节。然后用
作者简介:李一天(1990.),男,安徽省人,复旦大学,软件学院 硕士研究生,研究方向:计算机图形学,人机交互技术,上海,201203
・22・
Micr0c0mputer Applications Vo1.31,No.7,2015 研究与设计 微型电脑应用2015年第31卷第7期
JMP指令或1NT指令,直接或间接地跳转到替代函数的代
码入口地址。在替代函数生命域结束前恢复目标API的前几
个指令字节,保证其原来的程序正常运行。该方法缺点在于
无法截获重定向前对目标函数的调用。
并使用Detours替换orgd3d9.dU的绘制函数的前5个字节,
将其重定向到d3d9.d1l中的绘制函数,完成对绘制函数的截
获工作。
2.2截获框架的拓展
(3)动态链接库替换(DLL替换) 为了实现图形表面的跨进程共享,从Direct)(10开始使
在Windows平台下,操作系统通过用户态的动态链接
图形库向应用程序提供图形绘制及显卡资源管理功能,而应
用程序是通过DLL的文件位置和文件名来加载DLL。DLL
用DirectX图形基础架构,简称DXGI。DXGI提供了对图
形硬件进行底层管理的功能如图3所示:
替换使用一个与原始DLL相同导出函数的DLL(自定义
DLL),截获应用程序对原始DLL的导出函数的调用。该
方法不需要修改应用程序的源代码,且由于函数截获在应用
程序运行前生效,应用程序在运行过程中对原始DLL导出
函数的所有调用均可被截获。
该方法的缺点是对于提供面向对象的接口,DLL替换
只能以对象为单位进行截获,即为了截获某个对象的成员方
法,必须截获该对象的创建方法,及该对象的所有公共成员,
图3 DirectX图形基础架构
因此开发截获库时工作量大。而且与系统兼容性差,图形库
升级后,自定义DLL通常需要重新编写。
2图形应用程序截获框架
从DirectX10开始用DXG1对图形硬件进行底层管理f6J。
使得不同D3D的API之间也能共享资源。DXGI的主
要功能包括,枚举显示设备、创建管理交换链以及全屏模式
的切换等【 。
DXGI带来性能提升的同时,也给图形应用程序的截获
工作带来困难。像交换链的创建、全屏模式切换等函数都是
在DXGI图形库中定义的。为完成DirectX 10图形应用程序
为完成图形应用程序的拦截,需要同时截获多个图形库的函
数,加大了截获难度。针对此问题,本文完善DLL+Detours
截获框架,完成对DXGI图形库、D3D10图形库中目标函
的函数截获,多数情况下我们需要同时截获多个图形库。例
如,若想截获图形应用程序的帧缓存更新以及绘制函数,我
们必须同时完成对dxgi.dll和d3dl0.d11动态链接库的截获工
作。
数的截获工作,并解决因DXGI、D3D10图形库问依赖关系
产生的进程死锁问题。
2.1 DLL替换+Detours的截获框架
针对此问题,本文对DLL替换+Detours的截获框架进
行拓展,在不修改应用程序源代码和二进制镜像的前提下,
Y.Mao提出DLL替换+Detours的截获技术[ ,在不修
改应用程序源代码和二进制镜像的前提下,可以截获D3D9
图形库所有函数。Detours是微软开发的一个函数库,以函
数为单位进行截获,可以克服DLL替换的诸多缺点。Detours
以函数为单位进行截获,截获时只需要知道目标函数在内存
中的地址。根据该地址,Detours在运行时替换目标函数的
截获dxgi.dll以及d3dl0.d1l中所有的函数。
对DirectX 10图形应用程序的截获过程,如图4所示:
斑掰程垮龆载 加蟪dxgi dt
^dll
B l
屯d封
Bdll
d¨
e.dII
前5个字节,将目标函数重定向到用户自定义的函数I8]。替
换后DLL内部和外部对目标函数的所有调用将被截获。
对DirectX 9应用程序绘制函数的截获过程,如图2所
不:
藏耀积F#加靛 加载d3d9 dt
盘定j £.dl1 搬虢orgdxg[柑 自定义dxg1
dll
.
I务 韧鳓化螭截I 细裁d3dl0
dl1
l DLL耕嫱化两投l
.
orgdxgi.dl1
I帻缓存楚耩函数I
d3dl0.d1l
I 绘制荫教 I
图4 Direct3D 10函数截获框架
Adll
B I
^. l
B.d¨
^d
BdH
这里我们自定义DXGI动态链接库,在自定义dxgi.dll
的初始化函数中加载D3D10图形库(d3dl0.dl1),并使用
Detours完成对dxgi.dll以及d3dl0.dU目标函数的截获工作。
自定义d3dg.dl1 加蛾 自定义鹕d9 dIl
I D 婚他 l Orgd3d9 dl I DLL栅姥他两靛I
} 绘制^曦散 l l 绐剐谴散 I
Org以d9 dlt
这里需要特别注意DLL间的加载顺序。在多线程环境
下,DllMain里的代码容易引发线程死锁[ 。系统在装载DLL
的时候会自动产生一个Loader Lock,避免多个DLL同时被
l 蹬制醋毂 I
图2 Direct3D 9绘制函数截获过程
装载。LoaderLock从LoadLibrary函数调用的开始就自动加
锁,直到DllMain退出为止。此时若DLL存在依赖关系,
极易发生进程死锁。
自定义动态链接库d3d9.dll具有与原始d3d9.dll相同的
导出函数及文件名。我们将自定义d3d9.dll拷贝到与原始
d3d9.dll同一文件夹下,同时将原始d3d9.d1l重命名为
orgd3d9.dll。自定义d3d9.dll载入内存后程序自动调用其
DLL初始化函数。此时我们加载原始的图形库(orgd3d9.dl1),
例如,我们自定义D3D10图形库(d3dl0.dl1),在自
定义的d3dl0.dl1中加载原始d3dl0.dll以及dxgi.dll,进而截
获目标函数。系统在装载自定义d3dl0.dll时,自动加锁产
・23・
MicrocomputerApplications Vo1.31,No.7,2015 研究与设计 微型电脑应用2015年第31卷第7期
5总结
本文完善DLL替换+Detours的截获框架,在不修改图
ndows API—Technics of Hooking
[4]
Father H.Hooking Wi
API Functions On Windows[J].Assembly Programming
Journal,2004,2f2).
rek M.Peering Inside the PE:A Tour of the Win32
[5]
Piet
形应用程序源代码的情况下完成对DirectX 10库函数的截
获工作。基于该框架,利用已有的多投影显示的几何校正、
边缘融合算法,开发出一套单机驱动的多投影显示系统,
Protable Executable File Format[J].Microsofl Systems
Journa1.1994.9:27—30.
DirectX 10图形应用程序不用做任何修改就能多投影显示。
实验结果表明,该截获技术对图形应用程序的性能影响小,
程序画面流畅,运行稳定。未来我们将研究DirectX 1 1图形
应用程序的截获技术。
n32 Portable Executable File Format.[EB/OL1.
[6]
Wi
https://msdn.microsoft.co m/en—us/library/ms809762.aspx
.
2015.04.
Library Best Practices[EB/OL1.
【7]
Dynamic—Link
https://msdn.microsoft.corrden—us/library/windows
参考文献
毛燕东.面向单机驱动的多通道投影系统的图形应用程
序移植与绘制技术[D].上海:复旦大学,2009:24-28.
[2]
DXGI Overview[EB/OE1.htt0s://msdn.microsoft.com/en
us/library/bb205075一(vs.85).aspx.2015.04.
[3]
Jiang Z.Mao Y Qin B.et a1.A high resolution video
display system by seamlessly tiling multiple projectors[C]
—
/desktop/dn633971(v=vs.85).aspx,2015,03.
G.and Brubacher D.Detours:Binary interception of
[8]
Hunt
win32 functions[C].Proceedings of the 3rd USENIX
Windows NT Symposium.1999:12—13.
en C.and Michae1 L.Scott.Intercepting and
[9】
Hunt.Gal
Instrumenting COM Applications[C].Proceedings of the
Fiflh Conference on Object.Oriented Technologies and
Systems(COOTS’99).1999:45—5 6.
(收稿日期:2015.04.17)
6事c c c6
IEEE Intemational Conference on Multimedia and Expo.
2007:2070.2073.
c c6 c6事c6 c c6莽c6 £ c6 c6 c £ c6 c6 c c6 c c c c6事c6事c6事c c6 c6 c6事c c c6 c6 c c c
(上接第21页)
图3(b)的复原结果。从图中可知,本文复原算法的
重构效果更好,其保持了更加精细的边缘结构,见帽子边缘
与头发,如图3(e);A算法的复原质量同样较好,见图3
(d),但是视觉满意度度稍微略低于本文算法。而B算法的
修复结果见图3(c),难以兼顾精细边缘与纹理。从图3(f)
也可以看到,本文算法得到的复原图像梯度分布与真实图像
更力口贴近。
[6】
徐焕宇,孙权森,李大禹.基于投影的稀疏表示与非局部
正则化图像复原方法[J].电子学报,2014,42(7):1299—13
04.
[7]
Liqian Wang,Liang Xiao,Jun Zhang.New image
restoration method associated with tartlets shrinkage and
4总结
本文通过将权重因子与局部自回归约束融入到传统的
高斯先验中,并结合SAR先验,建立了局部加权高斯.SAR
联合先验模型,借助Bayesian推理,修复被损坏的图像。最
weighted anisotropic total variation[J].Sinalg Processing,
2013,93(4):661—670.
[8]
吴超,王勇,田洪伟.基于盲压缩感知模型的图像重构方
法[-J].系统工程与电子技术,2014,36(6):1050—1055.
JF.Dong B.Osher S.Image restoration:Total
[9]
Cai
variation,wavelet frames,and beyond[J].Journal of the
American Mathematical,2012,25(17):1033-1041.
[10] Yuan Q.Zhang L.Shen H.Hyperspectral image
denoising employing a spectral—spatial adaptive total
终提出了局部加权高斯一SAP,联合先验模型的图像复原算法
variation model[J].Geoscience and Remote Sensing,
2012.50(101:3660—3667.
Villenaa S.Vegaa M.Babacan S.D.Bayesian combination
测试结果显示:与当前图像复原算法相比,局部加权高斯一
SAR联合先验模型的复原视觉效果更好,其梯度分布吻合
程度最好。
of sparse and non—sparse priors in image super
参考文献
柬代群,朱浩,盛惠兴.一种基于视觉特性的彩色图像增
强算法[JJ.计算机与现代化,2014,34(2):161—165.
0 Minimization for wavelet
[2]
Zhang Y Dong B.Lu Z.1
resolution[J].Digital Signal Processing,2013,23(10):
530.541.
D.Molina R.Katsaggelos A.Variational
[12]
Babacan S.
Bayesian super resolution[J].IEEE Trans.Image Process,
2011,20(4):984-999.
frame based image restoration『J].Mathematics of
Computation.82(20):995.1015.
[3]
李俊英,肖升.结合局部与非局部的图像复原方法[J].计
算机应用研究,2014,32(5):56—60.
et M.Historical document image
[4】
Hedjam R.Cheri
restoration using multispectral imaging system[J].Pa ̄em
M.WangZ.SSIM—inspired image
[13]
Rehman A.Rostami
restoration using sparse representation[J].Journal on
Advances in Signal Processing,2012,20(1):1—12.
k AC.No—reference image blur assessment
[14]
Chen MJ.Bovi
using multiscale gradient[J].Journal on image and video
Recognition,2013,46f81:2297.23 12.
ao L.Zhang J.New image restoration method
[5]
Wang L.Xi
processing,201l,l9(7):356—368.
[15] 周景超,戴汝为,肖柏华.图像质量评价综述[J].计算机科
学,2008,35(7):1-4.
(收稿日期:2015.03.13)
associated with te仃olets shrinkage and weighted
anisotropic total variation[J].Signal processing,2013,
93(4):661.670。
・26・
版权声明:本文标题:DirectX 10 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1719860148a801618.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论