現代編譯器GCC功能非常強大,甚至可以防止編譯階段的緩衝區溢出,從而OS無法在堆棧空間上運行代碼。緩衝區溢出編譯器的藝術
例如:
void function(char *str)
{
char buffer[16];
strncpy(buffer, str, 256);
}
void main()
{
char large_string[256];
int i;
for(i = 0; i < 256; i++)
large_string[i] = 'A';
function(large_string);
}
我可以得到神奇的0x41414141的唯一方法就是設置GCC編譯參數等類
gcc -fno-stack-protector -z execstack stackoverflow.c -o stackoverflow
(我測試了它在Ubuntu 10.04 86透徹32位盒)
有什麼辦法可以繞過海灣合作委員會堆棧粉碎保護?
你指的是哪個限制,爲什麼你想繞過它? –
你想故意破壞堆棧嗎?爲什麼?而你的代碼有一個bug,順便說一句。你忘了NULL結束'large_string'。 'strcpy()'不會僅限於255個字節。 –
我認爲你的意思是詢問是否可以繞過海灣合作委員會的堆棧保護,如果是的話,你應該編輯這個問題來說明問題。 – iabdalkader