赞
踩
是的,有破坏全球变量的内容(你的变量是不是在您发布的例子静态)一种以上的方法。
指针是一种很好的工具,可以破坏内存并编写程序不应该写的地方。铸造还可以添加一些兴奋:
#include
using namespace std;
int aaa[5];
int bbb;
int main(void) // Do *your* main() functions always return a value????
{
double * ptr_double = 0;
// Assign the pointer to double to point to the last integer.
// Treat the last integer in the array as a double.
aaa[4] = 45;
cout << "aaa[4] = " << aaa[4] << endl;
ptr_double = (double *)(&aaa[4]);
*ptr_double = 3.14159267;
cout << "aaa[4] = " << aaa[4] << endl;
return -1;
}
多线程,可以让每个线程写入全局变量,然后让他们读回值。在写作之前和写作之后放置随机延迟可以更详细地向你展示它是如何工作的。
另一种方法是将变量的地址分配给I/O硬件设备的目标寄存器,如UART。当UART接收到数据时,它将把该数据放入该变量中,而不考虑变量的用途。
一般来说,值写入到它不应该的位置的代码会被破坏。主要原因是缓冲区溢出:写入比分配给变量更多的数据。硬件设备(如DMA控制器和USB控制器)也可能发生超限。另一个原因是通过指针:指针指向一个无效的位置。
变量可能会被堆栈溢出和堆溢出损坏。在许多体系结构中,这些结构向对方扩展。堆栈上太多变量或函数递归(或调用深度)可能会使堆栈覆盖到堆中。同样,从堆中分配太多内存可以使堆覆盖堆栈。
与其研究如何破坏变量,我相信你应该努力提高代码安全性:设计并编写代码,使其没有缓冲区溢出,写入正确的位置和共享变量受到多任务同时写入的保护,线程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。