首页
社区
课程
招聘
[讨论]用RET直接代替invoke ExitProcess, NULL,是否可取?
发表于: 2005-11-25 14:19 7076

[讨论]用RET直接代替invoke ExitProcess, NULL,是否可取?

HSQ 活跃值
8
2005-11-25 14:19
7076
我试用过,用RET直接代替invoke ExitProcess, NULL,程序正常运行并结束,有谁知道个中原理。。。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 298
活跃值: (445)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
如果没有破坏堆栈的话,ret应该可以代替ExitProcess.
2005-11-25 15:40
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
使用RET指令结束程序系统会自动调用ExitProcess结束进程。
2005-11-25 15:41
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
非也
楼主可以试试写一个多线程的程序(例如使用mciSendCommand之类函数播放音频文件),然后在主线程中使用ret指令返回,如果其他线程没有结束的话就程序不会退出.
如果某个线程使用ret指令返回,Windows会自动替它调用ExitThread函数,而如果这是进程的最后一个线程的话,ExitThread函数又会自动去调用ExitProcess函数,这样进程就终止了
2005-11-26 01:18
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
5
原来如此,不过目前我还没有使用多线程写程序,一般都采用单线程
2005-11-26 13:37
0
雪    币: 216
活跃值: (370)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
最初由 thebutterfly 发布
非也
楼主可以试试写一个多线程的程序(例如使用mciSendCommand之类函数播放音频文件),然后在主线程中使用ret指令返回,如果其他线程没有结束的话就程序不会退出.
如果某个线程使用ret指令返回,Windows会自动替它调用ExitThread函数,而如果这是进程的最后一个线程的话,ExitThread函数又会自动去调用ExitProcess函数,这样进程就终止了

主线程ret自动exitprocess
非主线程ret自动exitthread
主线程exitthread自动exitprocess
请参考windows源码。
对于播音频这种,如果非主线程还在系统空间未返回用户空间,操作系统可能有一定等待时间。
2005-11-26 14:07
0
雪    币: 217
活跃值: (99)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最好不要用RET代替ExitProcess来退出主线程.
在Win9x中要注意保存EBP,否则RET时会出现非法操作.
有些壳(如Upack,MEW,FSG)是不保存EBP的.
2005-11-26 14:56
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
看后觉得有收获。
2005-12-18 17:44
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sas
9
有收获
2005-12-19 10:43
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
主线程ret自动exitprocess
非主线程ret自动exitthread
主线程exitthread自动exitprocess
请参考windows源码。
总结啊!强,
2005-12-20 19:45
0
游客
登录 | 注册 方可回帖
返回
//