6
我是新來的stackoverflow,所以我提前道歉我犯的任何錯誤。從C程序更改堆棧內存
我碰到過這個C拼圖最近。該程序如下。
#include<stdio.h>
void change()
{
}
int main()
{
printf("\nHello");
change();
printf("\nHai");
printf("\nHow are you?");
return 0;
}
預期產量,
Hello
Hai
How are you?
的問題要求我們改變輸出的函數變化()
Hello
How are you?
你不應該添加一些代碼如下在main()中做任何改變。
我試圖通過避免語句printf(「\ nHai」)來更改存儲在堆棧內存中的函數change()的返回地址。但是當我使用gcc編譯時,我遇到了錯誤。
我在change()中添加的代碼如下所示。
void change()
{
char ch;
*(&ch+10)+=20;
}
的值添加到CH(10和20)被固定,通過使用
objdump -d ./a.out
我希望得到一些建議來解決這個問題。提前感謝您的時間和耐心。
你能發佈你得到的錯誤嗎? – nvoigt 2013-03-11 16:33:23
您首先需要進行反彙編,以檢查堆棧中返回值的存儲位置。 – m0skit0 2013-03-11 16:33:57
如果你不得不依賴未定義的行爲來實現結果,我認爲這是一個糟糕的「難題」。除非你專業地進入系統安全,否則這些知識是不值得的。 – DevSolar 2013-03-11 16:34:34