zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:4485回复:6

用MmGetSystemRoutineAddress动态加载函数和直接调用函数有什么区别?

楼主#
更多 发布于:2007-08-23 14:46
在楚大虾的过滤驱动文章中,看到了通过MmGetSystemRoutineAddress动态加载的一些函数,这些直接调用不是也可以使用么?为什么非要动态加载?

最新喜欢:

linshierlinshi...
troylees
驱动牛犊
驱动牛犊
  • 注册日期2006-05-10
  • 最后登录2009-05-01
  • 粉丝0
  • 关注0
  • 积分678分
  • 威望128点
  • 贡献值0点
  • 好评度67点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-23 15:01
Re:用MmGetSystemRoutineAddress动态加载函数和直接调用函数有什么
因为有些函数虽然存在,但没有被导出,所以不能直接调用
rhettxie
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2010-02-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望65点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-23 16:01
没导出的函数MmGetSystemRoutineAddress也是得不到的

有些函数不是每个系统下都存在, 在存在这个函数的系统下用MmGetSystemRoutineAddress才能去动态调。
静水流深
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-08-23 18:00
引用第2楼rhettxie于2007-08-23 16:01发表的  :
没导出的函数MmGetSystemRoutineAddress也是得不到的

有些函数不是每个系统下都存在, 在存在这个函数的系统下用MmGetSystemRoutineAddress才能去动态调。


既然系统下有的函数,直接调用就是,干嘛在来动态调用?还是没明白
rhettxie
驱动牛犊
驱动牛犊
  • 注册日期2004-10-27
  • 最后登录2010-02-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望65点
  • 贡献值0点
  • 好评度59点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-23 18:10
只能动态调。

比如一个函数只在2003下有,2000下没有,你要是代码里直接调,那么程序在2000下刚启动的时候就会出错,告诉你找不到xxx的入口点。 如果你在代码里判断系统是2003,然后动态去调就可以,即便你在2000下运行也不报错。当然了,2000下怎么实现就是另外的问题了
静水流深
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-08-24 10:28
呵呵,谢谢楼上的兄弟们,终于明白了,原来是因为在2000下,不管你用不用这个2000下没有的函数,系统都会报找不到xxx的入口点.
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-27 12:08
其实真正的原因是,有的函数虽然在.exe/.dll中导出了,但是没有相应的.lib库文件,linker就找不到了。
游客

返回顶部