首页
社区
课程
招聘
[求助]请问DLL多进程多线程安全问题
发表于: 2007-12-21 08:38 8888

[求助]请问DLL多进程多线程安全问题

2007-12-21 08:38
8888
现在要设计一个DLL他需要访问ntdll.dll的某些未公开函数所以我将这些用到的函数指针声明为全局的现在出现了一个问题,在进程/线程退出了dll后但是其他进程/线程并没有释放dll导致了函数指针为空的访问违规,请问有什么好的方法解决这个问题?
我现在想到了使用计数器方法——声明一个全局变量用于对dll引用进行计数为0则清空
不知还有什么更有效的解决方案

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2
在进程/线程退出了dll后但是其他进程/线程并没有释放dll导致了函数指针为空的访问违规


这句木有看明白捏.
2007-12-21 08:49
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
例如:
线程A链入了该A.DLL----进行了一些猥亵的操作后他释放了A.dll
进程B也链入了A.dll----但是在线程A释放了A.dll后B并没有释放A.dll导致A.dll中的全局变量释放当B调用A.dll的某个函数进行共享数据段操作的时候就产生了访问违规。
不知道我解释明白了没有
2007-12-21 09:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果你是在一个Process中那应该有适当的同步机制保证B自己访问的数据应该是有效的
如果不是在一个Process中那就更不用担心了,这不是一个资源的
2007-12-21 09:19
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
请问这个同步机制该如何保持?
2007-12-21 09:31
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
这同步HANDLE我该何时创建?
DllMain线程每次加载时候都会路过这里如果在这个地方CreateHandle势必将造成CreateHande*N而卸载时CloseHandle*1
2007-12-21 09:40
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
为什么要放到全局共享段里呢?
每次dll 被load 的时候获取一次就可以了啊。
2007-12-21 11:29
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
进程之间共享数据让人是非常猥琐的做法
2007-12-21 11:32
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
第一我不想让DLL客户端知道我是用了哪些API得到这些信息
第二每个进程可能多次加载我DLL里的这个类所以就造成了这种现象。
2007-12-21 11:53
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
10
“A.dll中的全局变量释放”???
既然这个变量在共享段又怎么会有释放这一说,你又没有动态开辟空间
就算这些变量是函数指针,对于ntdll.dll来说,同一系统的所有进程中所有的ntdll.dll模块地址都是相同的,也应该不会出现你说的情况
应该是你自己代码的问题
2007-12-23 13:48
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
就是因为是共享的所以在某个进程或线程释放了这个内存就为空了,当其他进程/线程在访问的时候就违规了。
2007-12-24 14:20
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
12
共享段和共享内存是两个东西,不要混了。
如过是共享段就不会出现你说的问题。
如果是共享内存,需要记录引用记数,引用数为0时才释放
2007-12-24 14:34
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
谢谢老大阿!又明白了一样
在问个问题:怎么才能动态导出C++类?
2007-12-24 14:43
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
14
还是托管好。
2007-12-24 14:48
0
雪    币: 20
活跃值: (37)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
C/C++
托管?什么概念?
怎么处理?
2007-12-24 14:51
0
游客
登录 | 注册 方可回帖
返回
//