CPU 可以执行存储在栈空间里的指令吗?

本文详细介绍了如何在《深入理解计算机系统》中进行缓冲区溢出攻击实验,包括代码实现、实验过程及遇到的问题,以及对栈内指令执行权限的探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://bbs.chinaunix.net/thread-1945526-1-1.html


《深入理解计算机系统》上有一个小练习,用来实验缓冲区溢出攻击系统。

/* $begin getbuf-c */
int getbuf()
{
    char buf[12];
    getxs(buf);
    return 1;
}

void test()
{
  int val;
  printf("Type Hex string:");
  val = getbuf();
  printf("getbuf returned 0x%x\n", val);
}

题目要求输入一段16进制的数字,以改变getbuf函数的返回值。printf打出 "getbuf returned 0xdeadbeaf"


我的思路是,输入数据让缓冲区溢出,以修改栈里的getbuf函数返回地址,如下图:

bufbomb.JPG 

经过具体实验,栈里的数据都能够通过缓冲区溢出修改成功,返回地址也没问题,但是当getbuf返回时,CPU执行到我修改后的返回地址上时,报出了段错误。如果将该返回地址改为代码段里的地址,就不会有问题。所以我在疑惑,是否栈里存储的代码有权限?换句话说,就是我把机器指令放在栈里,是否能够被CPU执行?










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值