函数介绍

函数原型

void *memcpy(void *destin, void *source, unsigned n);

参数

  • destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。

  • source-- 指向要复制的数据源,类型强制转换为 void* 指针。

  • n-- 要被复制的字节数。

返回值

该函数返回一个指向目标存储区destin的指针。

注意

该函数的结尾是以'\0'判断的

缺陷分析之一:区域重叠问题

画个图就清晰了

下面为正常情况下的状况

(注意堆是从下向上增长的,所以复制的起始地址在下方)

下图为目标地址dest的起始地址在src的起始和末尾之间

缺陷分析二: 因为可覆盖而可导致的可实施的栈攻击

嘿嘿,参考我原来的一篇文章

重谈堆栈方向和栈溢出的利用(栈溢出攻击原理)_星空_AZ的博客-CSDN博客_堆栈溢出攻击

既然能覆盖不安全的区域,那么就可以用该函数穿透上面栈的底部,将想要跳转的地址注入到指定的内存空间中,完成栈攻击

Logo

一站式 AI 云服务平台

更多推荐