阅读:4485回复:6
用MmGetSystemRoutineAddress动态加载函数和直接调用函数有什么区别?
在楚大虾的过滤驱动文章中,看到了通过MmGetSystemRoutineAddress动态加载的一些函数,这些直接调用不是也可以使用么?为什么非要动态加载?
![]() |
|
最新喜欢:![]() |
沙发#
发布于:2007-08-23 15:01
Re:用MmGetSystemRoutineAddress动态加载函数和直接调用函数有什么
因为有些函数虽然存在,但没有被导出,所以不能直接调用 |
|
板凳#
发布于:2007-08-23 16:01
没导出的函数MmGetSystemRoutineAddress也是得不到的
有些函数不是每个系统下都存在, 在存在这个函数的系统下用MmGetSystemRoutineAddress才能去动态调。 |
|
|
地板#
发布于:2007-08-23 18:00
引用第2楼rhettxie于2007-08-23 16:01发表的 : 既然系统下有的函数,直接调用就是,干嘛在来动态调用?还是没明白 |
|
地下室#
发布于:2007-08-23 18:10
只能动态调。
比如一个函数只在2003下有,2000下没有,你要是代码里直接调,那么程序在2000下刚启动的时候就会出错,告诉你找不到xxx的入口点。 如果你在代码里判断系统是2003,然后动态去调就可以,即便你在2000下运行也不报错。当然了,2000下怎么实现就是另外的问题了 |
|
|
5楼#
发布于:2007-08-24 10:28
呵呵,谢谢楼上的兄弟们,终于明白了,原来是因为在2000下,不管你用不用这个2000下没有的函数,系统都会报找不到xxx的入口点.
![]() |
|
6楼#
发布于:2007-08-27 12:08
其实真正的原因是,有的函数虽然在.exe/.dll中导出了,但是没有相应的.lib库文件,linker就找不到了。
|
|