是的,有破壞全球變量的內容(你的變量是不是在您發佈的例子靜態)一種以上的方法。
指針是一種很好的工具,可以破壞內存並編寫程序不應該寫的地方。鑄造還可以添加一些興奮:
#include <iostream>
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控制器)也可能發生超限。另一個原因是通過指針:指針指向一個無效的位置。
變量可能會被堆棧溢出和堆溢出損壞。在許多體系結構中,這些結構向對方擴展。堆棧上太多變量或函數遞歸(或調用深度)可能會使堆棧覆蓋到堆中。同樣,從堆中分配太多內存可以使堆覆蓋堆棧。
與其研究如何破壞變量,我相信你應該努力提高代碼安全性:設計並編寫代碼,使其沒有緩衝區溢出,寫入正確的位置和共享變量受到多任務同時寫入的保護,線程。
C或C++?兩者都是完全不同的語言。 –
它是C++。不是C – cateof