windows 堆栈溢出简易测试代码
生活随笔
收集整理的這篇文章主要介紹了
windows 堆栈溢出简易测试代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境:windows xp sp2 + vc 6.0
?
Code?1#include?<stdio.h>
?2
?3int?fun2()
?4{
?5????printf("-------------Get?privilege!---------\n");
?6????getchar();
?7????return?0;
?8}
?9
10int?fun1()
11{
12????int?iRet?=?0;
13????int?*pRet?=?&iRet;
14????pRet?=?pRet?+?2;
15????*pRet?=?(int?)&fun2;
16????return?0;
17}
18
19int?main(void)
20{
21????fun1();
22????return?0;
23}
?
執行后會在控制臺打印出-------------Get privilege!---------,并在下一行等待輸入。
溢出主要發生在13-15行,通過pRet獲取iRet在堆棧中的位置,然后相對偏移到存放函數的返回地址處,由第15行代碼用fun2的地址覆蓋返回地址,當fun1返回時將跳轉到fun2執行。
轉載于:https://www.cnblogs.com/anzhihun/archive/2008/12/10/1351944.html
總結
以上是生活随笔為你收集整理的windows 堆栈溢出简易测试代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [导入]身份验证方面的问题
- 下一篇: The Best and the Wor