send sendto 和 WSASend 在底层都会调用一个函数叫 WSPSend,F7 进入 send 函数,第三个调用的 call 就 WSPSend 函数。...条件断点筛出心跳包 幻想神域这个游戏的发包函数的 WSASend(),首先来了解一下这个函数参数的含义 int WSAAPI WSASend( SOCKET...跳出线程发包 首先需要找到包的来源,在 WSASend 函数下断。 ? eax 是 pBuffers 的结构体地址,而 eax 来源于 [esp+0x28] ?...判断的方法是对比 WSASend 和找到地址的调用堆栈。 我们发现两个调用堆栈的地址是相同的,说明还没有跳出发包线程。需要继续追 eax 的来源然后下写入断点。 ?...直接对比 WSASend 的 pBuffers 和 [ebp+8]+4] 的数据内容 ? 这两个地方是一致的,那么说明 [ebp+8]+4] 就是加密的封包内容。
接下来使用调试器ollydbg去附加浏览器,然后在命令输入bp WSASend ? 然后重新点击百度里的搜索按钮,这是调试器会断在WSASend地方: ? 我们再看堆栈区域,往下翻堆栈会看到 ?...有sha256相关的hash计算的,这里就是说在发送数据之前经过一些tls的计算的过程,下面我继续走掉返回到调用WSASend的地方: 0x66F20F20 ?
调用WSASend准备发送数据工作 或调用WSARecv准备接收数据工作(这一步,不是必须)*/ } //普通客户端socket收发数据 else...(pIOContext->Type == 收) { //解析收到的数据(这一步,不是必须) //调用WSASend
使用事件通知的方法来实现重叠IO模型,基于事件的话,就要求将Win事件与WSAOVERLAPPED结构关联在一起, 使用重叠结构,常用的send,sendto,recv,recvform也被WSASend...I/O模型,必须指定WSA_FLAG_OVERLAPPED ); 由于要用到重叠模型来提交我们的操作,所以原来的recv、send、sendto、recvfrom等函数都要被替换为WSARecv、WSASend...(2)传输数据 在重叠I/O模型中,传输数据的函数是WSASend\WSARecv(TCP)和WSASendTo、WSARecvFrom等,下面是WSASend的定义: The WSASend...(对于非重叠套接口则忽略) 返回值 若无错误发生且发送操作立即完成,则WSASend()函数返回0。...这就是调用重叠操作(WSARecv()、 WSARecvFrom()、WSASend()、WSASendTo() 或 WSAIoctl())时指定的那个套接口。
在文件中我们也提到过完成端口,其实我们利用Linux上一切皆文件的思想来考虑这个问题就可以很方便的理解,既然我们需要异步的方式来读写网卡的信息,这与读写文件的方式类似,既然文件中存在完成端口模型,网络上存在也就不足为奇了...buf.len = dwNumberOfBytes; lpOverlapped->m_dwFlags = 0; WSASend...针对FD_READ事件,先打印客户端发送的信息,然后调用WSASend将信息原样返回,接着设置网络事件为FD_WRITE,以便断开与客户端的链接。...因此又有了重叠IO的模型和一些列的新的API,向WSARecv和WSASend等等函数。
CreateIoCompletionPort((HANDLE)clientSocket , hIOCP,(ULONG_PTR)自定义的结构,0); 跟 iocp绑定的一个自定义参数; lpOverlapped : 是传递给 WSASend...下面代码里没有使用 CancelIo 之类的函数,如果实际需要直接用 CancelIoEx 来取消无关线程的Overlapped操作, 另:在发送数据[WSASend] 完成后 , 需要检查是否发送完成...pData->wsabuf.len = nBytesTransfered; pData->nSendBytes = 0; pData->nTotalBytes = nBytesTransfered; WSASend...wsabuf.len = pData->nTotalBytes - pData->nSendBytes; pData->wsabuf.buf = pData->buf + pData->nSendBytes; WSASend
SetActiveWindow 置顶窗口:BringWindowToTop 设置窗口大小和位置:SetWindowPos 生成随机数:srand 启用网络:WSAStartup(具体作用未知) 发送网络数据:send或WSASend
= ::WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP, NULL,0,WSA_FLAG_OVERLAPPED); 2传输数据:WSASend
这些函数主要使用与TCP协议,我们可以在程序启动的时候创建大量的SOCKET句柄,在必要的时候直接使用AcceptEx这样的函数来使用已有的SOCKET作为与客户端的连接,在适当的时候使用WSARecv、WSASend...WSABUF 参数 在WSASend 和WSARecv的参数中总有一个WSABUF的参数,这个参数很简单的就只有一个缓冲区指针和缓冲区长度,加上函数后面表示WSABUF的个数的参数,很容易想到这些函数可以发送...作为WSASend、WSASendto、WSARecv、WSARecvFrom等函数的数组参数,最终WSABUF数组可以描述多个分散的缓冲块用于收发。...特别是在服务端需要频繁的调用WSASend、WSARecv这样的操作,如果每一个都锁定一定的缓冲,这个内存消耗也是惊人的。所以这里传入NULL,只让其进行事件通知,而写入的操作由程序自己做。...最后调用WSASend将数据原样返回。 当完成通知事件是 FD_WRITE时表示我们已经完成了发送数据到客户端的操作,此时断开与客户端的连接并清理对应的缓冲。
调用WSASend准备发送数据工作或调用WSARecv准备接收数据工作 (这一步,不是必须)*/ } //普通客户端socket收发数据 else...Type == 收) { //解析收到的数据 //(这一步,不是必须) //调用WSASend
现在摆在面前的就是如何高效的读写数据,与磁盘操作做类比,当接收到WSAAsyncSelect对应的消息或者WSAEvent返回时就是执行读写操作的时机,下面紧接着就是调用对应的读写函数来进行读写数据了,而联想到linux...在WinSock1.0 中可以使用ReadFile和WriteFile来支持重叠IO,但是WinSock2.0 中重新设计的一套函数来支持重叠IO WSASend (send的等价函数) WSASendTo...利用该模型首先需要把一个event对象绑定到OVERLAPPED(WinSokc中一般是WSAOVERLAPPED)上,然后利用这个OVERLAPPED结构来进行IO操作.如:WSASend/WSARecv...这主要是因为对于每个重叠I/O操作(WSASend/WSARecv等)来说,都必须额外创建一个Event对象。对于一个I/O密集型SOCKET应用来说,这种消耗会造成资源的严重浪费。
借用Linux Man page中对AIO的介绍: The POSIX asynchronous I/O (AIO) interface allows applications to initiate...答案是在每次请求时关联,比如WSARecv, ReadFileEx, WSASend 等函数都有一个参数为LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
WSABUF wsabuf; wsabuf.buf = PerIoData->buffer; wsabuf.len = sizeof(PerIoData->buffer); iRes = WSASend...completionPort, (DWORD)PerSocketData, 0); // 开始在接受套接字上处理I/O使用重叠I/O机制 // 在新建的套接字上投递一个或多个异步 // WSARecv或WSASend
Linux 文件系统 目录 说明 bin 存放二进制可执行文件 sbin 存放二进制可执行文件,只有 root 才能访问 boot 存放用于系统引导时使用的各种文件 dev 用于存放设备文件 etc...是超级管理员 localhost 表示主机名 ~ 表示当前目录(家目录),其中超级管理员家目录为 /root,普通用户家目录为 /home/chan $ 表示普通用户提示符,# 表示超级管理员提示符 Linux...test.tar.gz 文件搜索命令 locate:在后台数据库搜索文件 updatedb:更新后台数据库 whereis:搜索系统命令所在位置 which:搜索命令所在路径及别名 find:搜索文件或文件夹 用户和组 Linux
DWORD dwFlags; WSABUF buf; buf.buf = pBuffer->buff; buf.len = pBuffer->nLen; if(::WSASend
Linux文件操作 Linux中,一切皆文件(网络设备除外)。 硬件设备也“是”文件,通过文件来使用设备。 目录(文件夹)也是一种文件。...boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件和镜像文件。...deb:deb是Device(设备)的缩写,该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。...系统会自动识别一些设备,例如U盘、光驱等,当识别后,Linux会把识别的设备挂载到这个目录下。...---- Linux文件的操作方式 文件描述符fd fd是一个大于等于0的整数。 每打开一个文件,就创建一个文件描述符,通过文件描述符来操作文件。
TRACE0("just like WSASend using overlapped"); SendMessage是调用的时候不返回,等消息响应后才执行TRACE0,这就是同步.
0xc000031f18, 0xc000031e88) = 0x0 (0) - WSASocketW(0x2, 0x1, 0x0, 0x0, 0x0, 0x81) = 0x1f0 (496) - WSASend...0xc000031f18, 0xc000031e88) = 0x0 (0) - WSASocketW(0x2, 0x1, 0x0, 0x0, 0x0, 0x81) = 0x200 (512) - WSASend
领取专属 10元无门槛券
手把手带您无忧上云