原帖由 GoldenSoldier 于 2009-11-25 18:33 發(fā)表
原帖請見:http://blog.chinaunix.net/u/26166/showart.php?id=198375
我的環(huán)境是redhant 9 ,2.4的核。由于對Linux環(huán)境下堆棧的不熟悉,所以就這個例子,做了一些哦測試。
我的代碼:
#include
void a ...
原帖由 kouu 于 2009-11-25 22:26 發(fā)表
沒看明白0xbfffe2d0上面存放的0x42130a14是怎么來的, 從attack函數(shù)返回后應(yīng)該是跳到這個地址上了...
LZ代碼中, main函數(shù)里面的那句i=(int)yaya是怎么回事? 代碼還有蹊蹺?
原帖由 GoldenSoldier 于 2009-11-25 18:33 發(fā)表
原帖請見:http://blog.chinaunix.net/u/26166/showart.php?id=198375
我的環(huán)境是redhant 9 ,2.4的核。由于對Linux環(huán)境下堆棧的不熟悉,所以就這個例子,做了一些哦測試。
我的代碼:
#include
void a ...
原帖由 ljk19841115 于 2009-11-26 09:23 發(fā)表
void main(){
int a_main=1;
i=(int)yaya;
foo();
}
樓主代碼有問題哈~ i 和 a_main??
原帖由 GoldenSoldier 于 2009-11-25 18:33 發(fā)表
原帖請見:http://blog.chinaunix.net/u/26166/showart.php?id=198375
我的環(huán)境是redhant 9 ,2.4的核。由于對Linux環(huán)境下堆棧的不熟悉,所以就這個例子,做了一些哦測試。
我的代碼:
#include
void a ...
原帖由 ljk19841115 于 2009-11-26 13:56 發(fā)表
這里假設(shè)在進入函數(shù)之前,棧是16字節(jié)對齊的話,那么,進入函數(shù)后,EIP和EBP被壓入堆棧后,棧地址最末4位二進制位必定是1000,esp -8則恰好使后4位地址二進制位為0000。看來,這也是為保證棧16字節(jié)對齊的
htt ...
原帖由 GoldenSoldier 于 2009-11-26 20:15 發(fā)表
非常感謝你的幫助,看了這篇文章,獲益匪淺啊。
文章提到,為了保證16字節(jié)的對齊,EBP最后一位(16進制)必須是8,所以ESP(ESP-8)就為0了。
我很希望這是對的,但是我所看到的卻不是啊。
比如下圖中: ...
原帖由 mik 于 2009-11-26 21:00 發(fā)表
對于用戶程序的入口函數(shù),即:main(), gcc 一般作 16 bytes 對齊。其它函數(shù),不作 16 bytes 對齊
原帖由 GoldenSoldier 于 2009-11-26 21:08 發(fā)表
非常感謝你的幫助!
受教了,原來如此!
不知mik大牛如何知道這么多,問一下有這方面的書籍或者技術(shù)資料參考一下么?
謝謝
另外,mik知道可以如何對上述代碼進行修改,使得main函數(shù)可以正常返回么? ...
原帖由 GoldenSoldier 于 2009-11-26 21:08 發(fā)表
非常感謝你的幫助!
受教了,原來如此!
不知mik大牛如何知道這么多,問一下有這方面的書籍或者技術(shù)資料參考一下么?
謝謝
另外,mik知道可以如何對上述代碼進行修改,使得main函數(shù)可以正常返回么? ...
void foo() { int c_foo = 1; int yaya_ret = (int) *(& c_foo + 2); *(& c_foo + 2) = (int)attack; *(& c_foo + 3) = (int)yaya; *(& c_foo + 4) = (int)yaya_ret; } void main(){ /* int a_main=1; */ /* a_main=(int)yaya; */ foo(); } |
原帖由 mik 于 2009-11-26 22:12 發(fā)表
在你的代碼里,你要使用 main() 正常退出,
必須把 調(diào)用 foo() 時的返回地址交由 yaya() 函數(shù)來返回
void foo()
{
int c_foo = 1;
int yaya_ret = (int) *(& c_foo + 2);
* ...
unsigned long get_ebp(void) { __asm__("movl %ebp, %eax"); } |
歡迎光臨 Chinaunix (http://www.72891.cn/) | Powered by Discuz! X3.2 |