函数介绍
函数原型
void *memcpy(void *destin, void *source, unsigned n);
参数
-
destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
-
source-- 指向要复制的数据源,类型强制转换为 void* 指针。
-
n-- 要被复制的字节数。
返回值
该函数返回一个指向目标存储区destin的指针。
注意
该函数的结尾是以'\0'判断的
缺陷分析之一:区域重叠问题
画个图就清晰了
下面为正常情况下的状况
(注意堆是从下向上增长的,所以复制的起始地址在下方)
下图为目标地址dest的起始地址在src的起始和末尾之间
缺陷分析二: 因为可覆盖而可导致的可实施的栈攻击
嘿嘿,参考我原来的一篇文章
重谈堆栈方向和栈溢出的利用(栈溢出攻击原理)_星空_AZ的博客-CSDN博客_堆栈溢出攻击
既然能覆盖不安全的区域,那么就可以用该函数穿透上面栈的底部,将想要跳转的地址注入到指定的内存空间中,完成栈攻击