linux 查看进程数据段,我该如何破坏一个linux进程的数据段?

是的,有破坏全球变量的内容(你的变量是不是在您发布的例子静态)一种以上的方法。

指针是一种很好的工具,可以破坏内存并编写程序不应该写的地方。铸造还可以添加一些兴奋:

#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控制器)也可能发生超限。另一个原因是通过指针:指针指向一个无效的位置。

变量可能会被堆栈溢出和堆溢出损坏。在许多体系结构中,这些结构向对方扩展。堆栈上太多变量或函数递归(或调用深度)可能会使堆栈覆盖到堆中。同样,从堆中分配太多内存可以使堆覆盖堆栈。

与其研究如何破坏变量,我相信你应该努力提高代码安全性:设计并编写代码,使其没有缓冲区溢出,写入正确的位置和共享变量受到多任务同时写入的保护,线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值