缓冲区溢出

#include
using namespace std;
void func1(int i);
void func2();
int main()
{
func1(1);
system(“pause”);
return 0;
}
void func1(int i)
{
unsigned char buf[1] ;
cout << “形参i的地址:” << hex << &i << endl;
cout << “数组buf的首地址:” << (void *)buf << endl;
int k = (int)&i - (int)buf;
long long go = (long long)&func2;
cout << “func2的地址:” << &func2 << endl;
cout << “func2的地址:” << hex<<go << endl;
buf[k - 1] = go>>56;
buf[k - 2] = (go<<8)>>56;
buf[k - 3] = (go<<16)>>56;
buf[k - 4] = (go<<24)>>56;
buf[k - 5] = (go<<32)>>56;
buf[k - 6] = (go<<40)>>56;
buf[k - 7] = (go<<48)>>56;
buf[k - 8] = (go<<56)>>56;
long long *p;
p = (long long *)(&buf[k - 8]);
cout << endl << “存储返回地址的位置:” << p << endl;
cout << “值为:” << uppercase << *p << endl;
cout << “该位置的8个字节:” << endl;
cout << “地址” << (void *)&buf[k - 1] << “处存放的值为:” << uppercase << (int)(buf[k - 1]) << endl;
cout << “地址” << (void *)&buf[k - 2] << “处存放的值为:” << uppercase << (int)(buf[k - 2]) << endl;
cout << “地址” << (void *)&buf[k - 3] << “处存放的值为:” << uppercase << (int)(buf[k - 3]) << endl;
cout << “地址” << (void *)&buf[k - 4] << “处存放的值为:” << uppercase << (int)(buf[k - 4]) << endl;
cout << “地址” << (void *)&buf[k - 5] << “处存放的值为:” << uppercase << (int)(buf[k - 5]) << endl;
cout << “地址” << (void *)&buf[k - 6] << “处存放的值为:” << uppercase << (int)(buf[k - 6]) << endl;
cout << “地址” << (void *)&buf[k - 7] << “处存放的值为:” << uppercase << (int)(buf[k - 7]) << endl;
cout << “地址” << (void *)&buf[k - 8] << “处存放的值为:” << uppercase << (int)(buf[k - 8]) << endl;
}

void func2()
{
cout << endl << endl << “运行到没有调用的函数处,实验成功!!!”;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值