有趣的ReadFile函数

在win10以下,当调用ReadFile函数的时候,第四个参数有这么一个注释:

LPDWORD lpNumberOfBytesRead,指向一个DWORD类型变量的指针,用来接收读取的字节数。如果下一个参数为NULL,那么一定要传入这个参数。

但是在win10中,微软默默修补了这个问题,所以这个参数为0也不会造成dos问题了。

我们首先做错误的api调用,结果如下:

Paste_Image.png

原因:在win7 kernelbase.dll中,ReadFile函数没有对第四个参数进行严格判断,而直接对句柄hfile进行了判断,如下图:

2.png

接着在调用NtReadFile失败后,赋值一个实际读取的长度ebx,因为ebx传入了0,所以没有地址,所以直接造成了报错。(win10以下版本)

3.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:莫益彰 学号:16030140019 【嵌牛导读】:串口通信是指外设和计算机间,通过数据信号线 、地线、控制...
    换个名字消消毒阅读 5,505评论 1 5
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 10,233评论 1 19
  • 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大奖:点击这里领取 函...
    HetfieldJoe阅读 5,446评论 2 12
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 12,041评论 5 22
  • 燕子南飞了,秋来了,果子熟了,叶子也染上了金黄色,自然在悄悄的谱写着新的篇章··· 在这个季节里,最喜欢它的风...
    叶之声阅读 3,003评论 0 0