首页
社区
课程
招聘
[旧帖] [求助]dll显式加载与隐式加载的区别? 0.00雪花
发表于: 2008-4-8 21:15 7227

[旧帖] [求助]dll显式加载与隐式加载的区别? 0.00雪花

2008-4-8 21:15
7227
读完了<Windows加载器与模块初始化> 还是有很多糊涂的地方

显式加载要调用 LoadLibray 进而调用 ldrLoadDll 然后是 LdrpRunInitializeRoutines 对么?
LdrpRunInitializeRoutines 是那里到出的函数呢?是在内核级么?
那么隐士加载呢?也会调用 LoadLibray 么?

隐式和显式两者有没有共同点?比如共同调用的函数??
若我要监控进程对dll的加载(包括隐式和显式),有什么好的方法呢?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 215
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
一块关注楼主的问题!尤其是监控进程对dll的加载
2008-4-8 21:31
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
3
LdrpRunInitializeRoutines函数是ntdll.dll中的一个未导出的函数。
楼主所说的文章中有一句话:“LdrpRunInitializeRoutines是调用EXE或DLL的指定入口点代码之前的最后一站。”
当EXE或DLL被载入时,其入口点函数就是在这里CALL进去的。

OllyICE中,由jingulong修改的Loaddll.exe及其loaddll.dll插件的原理,见http://bbs.pediy.com/showthread.php?threadid=16140,正是通过对LdrpRunInitializeRoutines函数进行inline hook,从而实现在dll加载时中断在dll的入口。
2008-4-9 02:46
0
雪    币: 6419
活跃值: (612)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
再请问一下:
隐式加载的dll会不会调用LoadLibrary?

刚刚又找到一个blog
http://www.cppblog.com/zerolee/archive/2007/05/20/24430.html
里面有一句话:"需要说明的是,隐式链接方式访问DLL时,在程序启动时也是通过LoadLibrary函数加载该进程需要的动态链接库的。
"

不知道这句话对不对?有什么依据呢?
2008-4-12 08:34
0
雪    币: 6419
活跃值: (612)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
顶顶吧 菜鸟没人理
2008-4-19 19:53
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
首先说明我说的是用户级的显式和隐式DLL加载
最明显的加载:最就是在程序的导入表中直接就有你要加载的DLL,就是我们通常做的哪样
隐藏一点加载:在程序中用LoadLibrary函数来加载要用的DLL再用GetProcAddress来得到想要的函数地址
再隐藏一点的加载:通过系统创建进程时在程序中放置的返回Kernel32.Dll的地址,按页边界来寻找Kernel32.Dll库,再从它的导出表中得到LoadLibrary和GetProcAddress函数,然后来得到想要的Dll和函数,这个方法可以不用任何函数来得到Kernel32.dll,其它的DLL还是要用LoadLibrary来得到的。
再再隐藏一点的加载:不知道了,呵呵,编程大牛们好像可以自己写一个LoadLibrary 的加载函数的,不过再怎么变,到了系统底层你还是一样要用里面的函数的。
2008-4-19 23:39
0
雪    币: 6419
活跃值: (612)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
也就是说
用户级下:隐式不用LoadLibrary, 显式用LoadLibrary
但是到了内核级,无论隐式还是显式,都会调用某些相同的函数,比如  LdrpRunInitializeRoutines
对吧?
2008-4-20 12:34
0
游客
登录 | 注册 方可回帖
返回
//