首页
课程
问答
CTF
社区
招聘
看雪峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
看雪峰会
看雪商城
证书查询
社区
编程技术
发新帖
0
0
[求助]远程dll线程资源释放问题
发表于: 2011-4-25 12:18
5188
[求助]远程dll线程资源释放问题
aqtata
2
2011-4-25 12:18
5188
我在 计算器 里注入了一个dll,在dll里创建了一个线程,什么都不做,只是循环常驻
var
test: tstringlist;
begin
test := tstringlist.create;
// 线程开始
while true do
begin
// 这里判断程序是否退出而跳出循环
// 但是程序一退出,线程立马结束了,后面的语句不会执行
sleep(100);
end;
// 线程结束
test.free;
end;
我想在 计算器 退出时释放这个线程
在dll的DLL_PROCESS_DETACH中做处理,但是经过调试发现计算器退出后所有线程都立即结束了,不会执行后面的test.free
这样就造成了内存泄漏
不知道有人碰到过这个问题没,怎么解决?
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
最新回复
(
3
)
virusest
雪 币:
692
活跃值:
(40)
能力值:
( LV6,RANK:90 )
在线值:
发帖
6
回帖
94
粉丝
0
关注
私信
virusest
2
2
楼
依我的拙见, 首先, 你在dll的DLL_PROCESS_DETACH中作处理没用,系统要退出一个进程时, 会首先结束该进程中运行的线程, 也就是说线程的退出在释放dll前面,这样,当所有的线程退出后,操作系统释放该进程占用的所有资源。
还有就是, 就算后面的test.free不会执行,但是在进程退出后,操作系统会保证释放该进程占用的所有资源,他会为你擦干屁股。这种情况不会造成内存泄漏。这也是操作系统的基本职责。
内存泄漏是指在该进程运行期间,其某项操作申请了内存,而未释放,导致该进程运行期间内存不够,系统会挂掉该进程。
2011-4-27 09:20
0
aqtata
雪 币:
319
活跃值:
(951)
能力值:
( LV7,RANK:100 )
在线值:
发帖
76
回帖
358
粉丝
2
关注
私信
aqtata
2
3
楼
嗯,谢谢解答,我发现线程析构函数还是能被执行到,在这里做出释放就可以了
2011-4-27 12:10
0
网络游侠
雪 币:
0
活跃值:
(954)
能力值:
( LV3,RANK:30 )
在线值:
发帖
19
回帖
971
粉丝
14
关注
私信
网络游侠
4
楼
建议你这么写。
test := tstringlist.create;
try
//不管这里代码是否异常,都会强制释放已经分配的对象资源
finally
test.free;
end;
可以理解成一个析构函数,用来强制释放资源的!
2011-4-28 15:44
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
aqtata
2
76
发帖
358
回帖
100
RANK
关注
私信
他的文章
[求助]x64内存DLL如何捕获C++异常?
4114
[求助]开发LSP时如何调试?
4561
[求助]Ring3下能修改DLL路径?
3701
[求助]搭建WDK,缺少ntddk.h是怎么回事?
7252
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
返回
顶部