当前位置: 首页 > news >正文

网络彩票代理怎么做社区网站重庆南川网站制作价格

网络彩票代理怎么做社区网站,重庆南川网站制作价格,参观互联网之光博览会,云南网站制作一条龙数组越界访问漏洞是 C/C 语言中常见的缺陷#xff0c;它发生在程序尝试访问数组元素时未正确验证索引是否在有效范围内。通常情况下#xff0c;数组的索引从0开始#xff0c;到数组长度减1结束。如果程序尝试访问小于0或大于等于数组长度的索引位置#xff0c;就会导致数组… 数组越界访问漏洞是 C/C 语言中常见的缺陷它发生在程序尝试访问数组元素时未正确验证索引是否在有效范围内。通常情况下数组的索引从0开始到数组长度减1结束。如果程序尝试访问小于0或大于等于数组长度的索引位置就会导致数组越界访问。由于 C/C 没有对数组做边界检查不检查下标是否越界可以提升程序运行的效率导致在程序编译过程中它并不定会造成编译错误。攻击者可以利用数组越界访问漏洞来读取或修改程序内存中的数据甚至执行恶意代码。这种漏洞可能会导致程序崩溃、拒绝服务或者泄露敏感信息。因此在开发软件时应该确保对数组访问进行边界检查以防止发生这种类型的漏洞。 一、漏洞代码示例 首先展示一个包含数组越界访问漏洞的代码 #includestdio.h int main(){int a[7]{0,1,2,3,4,5,6};for(int i0;i7;i){a[i]0;printf(This is a test!\n);}return 0; } 可以很容易看出数组的长度为7下标只能取到6而在代码的第4行for循环的终止条件却为 i7导致在第6行会执行一个a[7]0的赋值操作出现数组越界问题。 我们编译并执行上述代码发现居然成功通过编译没有任何报错但是陷入了死循环并输出了满屏的This is a test!。 上述代码中的数组越界访问导致程序陷入死循环那么为什么会出现这种现象呢 二、汇编代码分析 我们通过 Compiler Explorer 将上述程序处理为 intel 风格的x86_64汇编代码看看 下面我们来分析上述汇编代码。 4-6行常规的栈帧初始化这里不做赘述。7-14行栈顶指针rsp减32字节为数组及变量开辟空间接着分别赋入 a[0] - a[6] 以及变量 i 的值。15行跳转至L2段。24-25行比较cmp指针[rbp-4]处存放的值变量i的值与7的大小如果小于或等于则跳转到L3段jlejump when less or equal。17行取出指针指向[rbp-4]位置的值存入寄存器eax中。18行执行cdqe指令将32位寄存器eax扩展为64位寄存器rax。19行到了导致数组越界的关键地方在这里将0赋值给了[rbp-32rax*4]我们假设某个时刻rax存放变量i的寄存器为7即下标已经越界此时[rbp-32rax*4] [rbp-4] i 0如14行。也就是说每当i7时在源代码第6行a[i]0处会再次将0赋值给i就导致for循环中 i7 - i0最终产生死循环。 小结一下导致死循环的根本原因是数组赋值语句a[i]0非法篡改了i的值。假设这里我们将a[i]0更改为a[i]7此时[rbp-32rax*4] [rbp-4] i 7程序依然可以正常执行。 三、进一步分析 这里我们更改一下示例代码为 #includestdio.h void func1() {long a[2]{0,1};a[3] 0;a[4] 0; }void func2() {printf(func2 excuted!); }int main(){func1();printf(No error!);return 0; } 执行上述代码会出现异常 因为在函数func1栈的高地址位存放了其返回地址当该函数执行完后cpu依据这个地址信息回到main函数中继续执行后续代码而第5行a[3]0处将数值0覆盖了该返回地址因此导致程序异常。根据上述逻辑如果我们将a[3]指向函数func1的返回地址理论上程序应该也可以正常执行。 同样地通过Compiler Explorer得到该程序的汇编代码 将a[3]指向函数func1的返回地址即修改 a[3]0 为 a[3]0x401171再次执行程序可以正常得到输出结果 另外我们还可以做如下修改 a[3]0x401151;a[4]0x401171; 将数组a指向函数func2的初始化地址让func1调用并执行func2函数。执行程序得到如下输出结果成功调用了函数func2。 四、总结 根据上述示例可以发现通过数组越界来覆盖函数的返回地址可以更改程序的执行流程。同样地攻击者可以填写存放恶意代码的地址从而引导函数func1去执行该恶意代码。因此在编写代码中对数组做边界检查尤为重要。 参考 [1] [汇编杂项]关于_高级语言中 数组越界与汇编中 栈溢出的_联系的思考 - SachieW - 博客园 (cnblogs.com) [2] 通过查看汇编理解数组越界 - 知乎 (zhihu.com) [3] CPU眼里的数组越界 | 堆栈溢出_哔哩哔哩_bilibili
http://www.sczhlp.com/news/197434/

相关文章:

  • 专业电影网站建设中国建设摩托车
  • 做旅游攻略比较好的网站盐城市城乡和住房建设厅网站
  • 个人社区网站备案led外贸网站建设
  • 编辑wordpress菜单唐山seo快速排名
  • 网站与域名深圳定制衣柜价格
  • 作业做哪些类型的网站360搜索网站提交入口
  • 上海羚凯网站建设湘潭网站建设 沟通磐石网络
  • 交互式网站模板简 wordpress 主题
  • 网站定制排名永久免费自助建站平台
  • 做外贸要自己建网站吗菏泽网站建设报价
  • 什么网站可以免费做会计初级别人 网站 粘贴 html 推广
  • 解放碑电子商务网站建设网站维护合同
  • 电子商务网站建设期末作业网站建设广告合同需要交印花税吗
  • 问答论坛网站建设wordpress打开邮箱
  • 做网站合肥聊城高唐网站建设公司
  • 做网站推销的如何谈客户微信免费推广平台
  • 网站开发软件、广西建设工程质量检测协会网站
  • 广西做网站的公司犀牛做网站的公司
  • 中间商可以做网站吗加拿大搜索引擎
  • 【第十五周】机器学习的学习笔记11 - 实践
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头厂商实力解析
  • 2025年无锡公考考编培训机构最新权威推荐榜:事业单位/央企国企招录培训实力厂家精选指南
  • 帮别人做网站违法wordpress微博图床优点缺点
  • 车机油哪个网站做的好微网站建设包括哪些方面
  • 姑苏区做网站汕头市网站建设分站服务机构
  • 外国网站备案设计师门户网站源码
  • 青岛李沧网站建设可信赖的企业网站开发
  • 好看的网站后台网络教学平台长沙理工
  • 重庆的网站建设公司快速创建一个网页
  • 广东品牌网站设计苏州餐饮 网站建设