创建 SvcHost.exe 调用的服务原理与实践
日期:2005年10月31日 作者: 查看:[大字体 中字体 小字体]-
3. Svchost代码
现在我们基本清楚svchost的原理了,但是要自己写一个DLL形式的服务,由svchost来启动,仅有上边的信息还有些问题不是很清楚。比如我们在导出的ServiceMain()函数中接收的参数是ANSI还是Unicode?我们是否需要调用 RegisterServiceCtrlHandler和StartServiceCtrlDispatcher来注册服务控制及调度函数?
这些问题要通过查看svchost代码获得。下边的代码是windows 2000+ service pack 4 的svchost反汇编片段,可以看出svchost程序还是很简单的。
主函数首先调用ProcCommandLine()对命令行进行分析,获得要启动的服务组,然后调用SvcHostOptions()查询该服务组的选项和服务组的所有服务,并使用一个数据结构 svcTable 来保存这些服务及其服务的DLL,然后调用PrepareSvcTable() 函数创建SERVICE_TABLE_ENTRY 结构,把所有处理函数SERVICE_MAIN_FUNCTION 指向自己的一个函数FuncServiceMain(),最后调用API StartServiceCtrlDispatcher() 注册这些服务的调度函数。
; =============================== Main Funcion ===========================================
.text:010010B8 public start
.text:010010B8 start proc near
.text:010010B8 pushesi
.text:010010B9 pushedi
.text:010010BA pushoffset sub_1001EBA ; lpTopLevelExceptionFilter
.text:010010BF xor edi, edi
.text:010010C1 callds:SetUnhandledExceptionFilter
.text:010010C7 push1 ; uMode
.text:010010C9 callds:SetErrorMode
.text:010010CF callds:GetProcessHeap
.text:010010D5 pusheax
.text:010010D6 callsub_1001142
.text:010010DB mov eax, offset dword_1003018
.text:010010E0 pushoffset unk_1003000 ; lpCriticalSection
.text:010010E5 mov dword_100301C, eax
.text:010010EA mov dword_1003018, eax
.text:010010EF callds:InitializeCriticalSection
.text:010010F5 callds:GetCommandLineW
.text:010010FB pusheax ; lpString
.text:010010FC callProcCommandLine
.text:01001101 mov esi, eax
.text:01001103 testesi, esi
.text:01001105 jzshort lab_doservice - 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 下一页
-
- 创建 SvcHost.exe 调用的服务原理与实践 相关文章:
- ·创建 SvcHost.exe 调用的服务原理与实践
- 创建 SvcHost.exe 调用的服务原理与实践 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:判断你的用户是否真的被黑客攻击
精品推荐
热点TOP10
- ·突破网络限制之三十六计篇
- ·BAT批处理文件语法
- ·软件注册码、安装序列号☆集锦
- ·管理员组获取系统权限的完美解决方案
- ·苹果机中如何安装Windows系统
- ·TCP/IP基础
- ·巧测MTU,加快网页打开速度
- ·杜绝自动弹出的网页
- ·Leopard中用户帐户和文件共享的新变化
- ·ADSL共享方案及实例操作
- ·IPv6详解
- ·两台电脑直连的方法
- ·Firefox的32个插件介绍
- ·瑞星个人防火墙安装与使用
- ·在电脑上录制电视节目
- ·使用httpModule做权限系统
- ·掌握IP地址知识 子网掩码与子网划分
- ·使用网桥能否实现ADSL独立拨号
- ·铁通宽带如何设置交换机(急)
- ·关于数据同步方面的一些经验
特别推荐
- ·用net start 可以启动的服务命令一览
- ·Linux阅读材料
- ·掌握IP地址知识 子网掩码与子网划分
- ·ADSL共享方案及实例操作
- ·2000/XP中无法删除文件的解决办法
- ·最全面的密码破解以及抗击手段大曝光
- ·两台电脑直连的方法
- ·电子邮件头解析
- ·密码遗忘通关手册
- ·Regsvr32的特殊作用
- ·收藏经典:windows消息大全
- ·nslookup-ipconfig基础网络命令
- ·网络硬盘数据保护及还原精灵实战
- ·巧用net命令进行局域网文件批量同步更新
- ·打造WIN2000/XP/2003系统万能克隆
- ·菜鸟必知 shift键十大密招大公开
- ·快速批量绑定MAC与IP地址
- ·98/2000/XP密码恢复方法
- ·还原精灵之另类破解
- ·查看内存是否处于双通道模式
