ws2_32.dll和wsock32.dll
Wsock32.Dll与Ws2_32.Dll区别:CSocket在Wsock32.Dll中实现,Socket API在Ws2_32.Dll实现。
这两个Dll是两个不同层次的接口,调用关系如下:
网络应用程序->CSocket(WSock32.Dll)->Socket API(ws2_32.Dll)-> 网络传输服务进程.
WSock32.Dll映射mswsock.dll和ws2_32.Dll两个文件。ws2_32.Dll是真正的实现。
我们知道,WS2_32.DLL导出了send、sendto、recv、recvfrom、WSASend、WSASendTo、WSARecv和WSARecvFrom,而WSOCK32.DLL也导出了send、sendto、recv、recvfrom函数(OD只能看到WSOCK32.DLL的recv、recvfrom,用VC的DEPENDS.EXE才能查看到send、sendto)。但MSDN上并没有说明WSOCK32.DLL里send、sendto、recv、recvfrom函数的原型,因此我一直认为跟WS2_32.DLL里的是完全一样的。不过在IE上HOOK的时候碰到了一些稀奇古怪的问题,用OD反汇编一下才发现:
1.WS2_32.DLL和WSOCK32.DLL的默认加载地址是一样的,各自的send、sendto函数的地址也是完全一样的,连函数里所有指令都完全一样。
2.recv、recvfrom就完全不同了,wsock32.dll的recv调用了WS2_32.DLL的WSARecv,recvfrom调用了WS2_32.DLL的WSARecvFrom,这跟WS2_32.DLL的recv、recvfrom完全不同。
因此,HOOK的时候要注意了!千万不要编写自己的recv、recvfrom函数后,为了贪图方便,就把WS2_32.DLL的recv、recvfrom函数和WSOCK32.DLL的recv、recvfrom函数都指向你编写的对应函数,这样是会出问题的。由于WS2_32.DLL的WSARecv和WSARecvFrom可用于非阻塞套接字,而WS2_32.DLL的recv、recvfrom函数只能用于阻塞套接字。WSOCK32.DLL的recv、recvfrom函数调用到了WSARecv和WSARecvFrom函数,如果你把WSOCK32.DLL的recv、recvfrom函数也指向了你编写的阻塞型recv、recvfrom函数,这会导致调用失败(异常)。错误信息可能是:无法在非阻塞套接字上立即完成所需操作。原因是应用程序使用非阻塞套接字调用到了WSOCK32.DLL的recv、recvfrom函数,但被你HOOK之后,跳到了你编写的阻塞型recv、recvfrom函数去执行,所以导致出现错误。
IE就是这样的,它的接收操作调用流程:
WININET.DLL->WSOCK32.DLL->WS2_32.DLL。
ws2_32.dll和wsock32.dll相关推荐
- 聊一聊ws2_32.dll和wsock32.dll
Wsock32.Dll与Ws2_32.Dll区别 CSocket在Wsock32.Dll中实现,Socket API在Ws2_32.Dll实现 这两个Dll是两个不同层次的接口,调用关系如下: 网 ...
- 替换系统wsock32.dll,实现封包拦截
// wsock32.cpp : Defines the entry point for the DLL application. //:::::::::::::::::::::::::::::::: ...
- [DLL劫持] 3 DLL劫持之实践 例子
该系列文章是依据本人平时对动态链接库的学习,归纳总结,所做的学习笔记.如有错误或待改善之处,请留下您宝贵的意见或建议. 先说说DLL劫持的原理吧,以下这段来自百度百科对DLL劫持原理的说明: 由于 ...
- 丢失msvcr120d.dll、msvcr120.dll、msvcp120d.dll、msvcp120.dll问题解决方法
问题描述 运行程序时出现如下错误: 还有丢失msvcr120d.dll.msvcr120.dll.msvcp120.dll等问题,不一一列出图片了. 说明: msvcp120d.dll ...
- libsybcomn64.dll php,libsybcomn.dll下载|
libsybcomn.dll是一款重要的dll文件.当你发现电脑出现类似找不到libsybcomn.dll.libsybcomn.dll文件错误或libsybcomn.dll丢失等类似提示.就来下载我 ...
- VC程序编译成exe后需msvcr100.dll、msvcp100.dll才能运行的解决方法
问题: vVC程序编译成exe运行提示缺少msvcr100.dll.msvcp100.dll文件. 要点: 1.将编译模式设置为 Release 模式,选择对应的Win平台32位或64位: 2.设置设 ...
- VC++6 开发MFC扩展DLL以及MFC DLL可以包含界面
VC环境可以开发win32 DLL和MFC DLL:下面来开发一个MFC DLL:Win7, VC6: 新建一个MFC exe工程:名为mfcddd:在同级目录下新建一个文件夹,名为mfcbin: 默 ...
- 转 ajax.dll 与 ajaxpro.dll的用法
转 ajax.dll 与 ajaxpro.dll的用法 文章分类:.net编程 ASP.NET AjaxPro的应用 1.首先下载AjaxPro组件.并将AjaxPro.dll引用到网站(或项目). ...
- 无法启动此程序,因为计算机中丢失msvcrtd.dll,Win7打开剑灵提示“丢失d3dx10_43.dll、MSVCRTD.dll文件”怎么办?...
Win7打开剑灵提示"丢失d3dx10_43.dll.MSVCRTD.dll文件"怎么办?剑灵是一款大型的动作类游戏,最近一位Win7用户在运行剑灵游戏时,系统提示"计算 ...
最新文章
- TensorRT PoolingLayer
- 一份完整的聚合支付中心设计方案!
- 引入Redis|tensorflow实现 聊天AI--PigPig养成记(3)
- 咖啡,一种心情的境界
- Machine Learning机器学习公开课汇总
- Keepalived工作原理
- 如何取消Angular rxjs Observable的订阅
- python基础===利用unittest进行测试用例执行的几种方式
- Mac新手使用技巧——设置Finder(访达)快捷键
- windows server 2012无法安装NET.framework3.5解决方法
- Atitit 项目wechat微信截屏生成vcf通讯录384 个 384个人 42个节拍,平均每个8个人 技术点 im图像裁剪, ocr Tesseract Vcf格式 /wechatTel
- 学习总结 java 父子级
- Go 爱好者福利,《Go 语言编程之旅》正式开源!
- ps盖印图层在哪里_ps盖印图层快捷键怎么用? ps盖印图层教程
- 2-10配置Linux网络
- 常见实用网站集合(行业研究/政策研究/学习/办公/设计/编程)
- C语言程序设计A重点,【艾学笔记】复习重点之C语言程序设计
- jquery服务器文件保存到本地,jQuery本地存储
- SAP中采购订单中的汇率是如何确定的
- Pico4VR一体机游戏资源下载安装教程,Pico4无线串流PCVR游戏教程pico4串流游戏下载
热门文章
- tableau无法建立连接_Tableau入门(一):数据连接
- SQL语言---数据的查询
- php rtx,Ubuntu 手记之RTX (腾讯通)
- 上海市计算机等级考试一级试题,2010上海市高校计算机等级考试(一级)试题
- java security用法_Java加密体系(一)java.security包
- 【笑话】公交车上的艳遇
- mysql数据库系统原理_数据库系统原理及MySQL应用教程
- 数据结构题集(c语言版)第1章:绪论
- 高数一上集合与映射思维导图,继续冲冲冲
- fast角点与ShiTomas角点速度对比