gh0st3.6执行流程

本文详细剖析了Gh0st3.6的执行流程,从CGh0stApp的InitInstance()开始,逐步解析CMainFrame的Activate()函数、CIOCPServer的构造及初始化过程,深入到监听线程ListenThreadProc()的运作,以及OnAccept()、AssociateSocketWithCompletionPort()等关键步骤,展示了服务器如何启动、监听和处理客户端连接的完整流程。
摘要由CSDN通过智能技术生成

1、CGh0stApp–>Initlnstance() 
1)配置界面信息及其他 
2)从.ini文件中读取监听端口ListenPort和最大连接数MaxConnection,并做相应的调整 
3)调用((CMainFrame*) m_pMainWnd)->Activate(nPort, nMaxConnection)去激活服务器,(跳到2)

2、CMainFrame–>Activate(UINT nPort, UINT nMaxConnections) 
0)1来 
1)检查是否存在m_iocpServer,如果有的话,shutdown一下 
(程序刚启动,一般是没有,这里停一下,不跟进,跟进到13) 
2)m_iocpServer新建对象,调用CIOCPServer的构造函数(跟进,到3) 
3)开启服务器,调用函数 
m_iocpServer->Initialize(NotifyProc, this, 100000, nPort)(跟进到4) 
4)获得主机名,通过主机名获得ip,并设置状态栏显示数据 
5)返回到1

3、CIOCPServer–>CIOCPServer() 
0)2来 
1)初始化套接字版本wsaData 
2)初始化一个临界区变量m_cs 
3)初始化15个iocpserver的变量, 
4)定义包标志bPacketFlag 
5)返回到2

4、CIOCPServer–>Initialize(NotifyProc, this, 100000, nPort) 
0)2来 
1)存下三个参数 
2)创建套接口m_socListen = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
3)创建网络事件m_hEvent = WSACreateEvent() 
4)将FD_ACCEPT事件关联到套接口上 
nRet = WSAEventSelect(m_socListen,m_hEvent,FD_ACCEPT); 
5)配置SOCKADDR_IN地址 
6)绑定套接头nRet = bind(m_socListen,(LPSOCKADDR)&saServer,sizeof(struct sockaddr)); 
7)监听端口nRet = listen(m_socListen, SOMAXCONN); 
8)开启监听线程 
m_hThread =(HANDLE)_beginthreadex(NULL,0,ListenThreadProc,(void*) this,0,&dwThreadId); 
9)跟进看一下这个监听线程都干了啥(跟进到5) 
A)初始化完成端口InitializeIOCP();(MD,数字太多,把我弄混了,居然把这个给漏了)(跳到20) 
B)返回2

5、CIOCPServer.–>ListenThreadProc(LPVOID lParam) 
0)4来 
1)无限while循环 
2)等待m_hKillEvent受信就跳出循环 
WaitForSingleObject(pThis->m_hKillEvent, 100) == WAIT_OBJECT_0 
3)插一句,受信是在CIOCPServer::stop中SetEvent(m_hKillEvent), 
就是在stop掉server的时候受信 
4)等待事件的发生,没有发生就阻塞在这里 
dwRet = WSAWaitForMultipleEvents(1,&pThis->m_hEvent,FALSE,100,FALSE); 
5)如果超时,继续while循环 
6)查看事件是什么事件 
int nRet = WSAEnumNetworkEvents(pThis->m_socListen,pThis->m_hEvent,&events); 
7)如果error的话就跳出while循环 
8)如果事件是FD_ACCEPT的话,表示有连接到来调用CIOCPSserver::OnAccept()(跟进到6) 
9)继

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值