- 論壇徽章:
- 0
|
原帖請見:http://blog.chinaunix.net/u/26166/showart.php?id=198375
我的環(huán)境是redhant 9 ,2.4的核。由于對Linux環(huán)境下堆棧的不熟悉,所以就這個例子,做了一些哦測試。
我的代碼:
- #include<stdio.h>
- void attack()
- {
- int attack=1;
- printf("hi,attacked!\n");
- }
- void yaya()
- {
- int yaya=1;
- printf("hi,yaya is my wife\n");
- }
- void foo()
- {
- int c_foo=1;
- *(& c_foo +2)=(int)attack;
- }
- void main(){
- int a_main=1;
- a_main=(int)yaya;
- foo();
- }
復(fù)制代碼
然后,gdb下觀察結(jié)果:
main函數(shù)的反匯編:
1.JPG (43.45 KB, 下載次數(shù): 129)
下載附件
2009-11-25 18:33 上傳
yaya函數(shù)的反匯編
2.JPG (35.96 KB, 下載次數(shù): 121)
下載附件
2009-11-25 18:33 上傳
attack函數(shù)的反匯編:
3.JPG (36.26 KB, 下載次數(shù): 118)
下載附件
2009-11-25 18:33 上傳
foo函數(shù)的反匯編:
4.JPG (26.67 KB, 下載次數(shù): 120)
下載附件
2009-11-25 18:33 上傳
在main的堆棧中,a_main的值從1變?yōu)閥aya函數(shù)的入口地址0x08048347,而進(jìn)入foo函數(shù)之后,本來0xbfffe2cc存放的是main返回的地址0x0804839f,但是改為attack函數(shù)的入口地址0x08048328。
這樣就會導(dǎo)致main函數(shù)無法正常返回。
5.JPG (52.99 KB, 下載次數(shù): 117)
下載附件
2009-11-25 18:33 上傳
下面是我畫的堆棧示意圖,請指教:
6.JPG (13.24 KB, 下載次數(shù): 117)
下載附件
2009-11-25 18:33 上傳
從函數(shù)foo返回后,就進(jìn)入了attack函數(shù)了。
7.JPG (13.24 KB, 下載次數(shù): 120)
下載附件
2009-11-25 18:33 上傳
打印“hi,attacked!”成功!
接著,返回段錯誤。
我的問題:為什么yaya函數(shù)沒有執(zhí)行,就出現(xiàn)了段錯誤?
照文章中所述的,yaya函數(shù)的入口地址0x08048347已經(jīng)放在了0xbfffe2d4,為什么eip會訪問不到么?
[ 本帖最后由 GoldenSoldier 于 2009-11-26 09:17 編輯 ] |
|