Can you summarize the following document?
        
  下例可用於覆蓋函式返回地址。 通過函式 codice_1 :  當命令列引數少於12個字元時()該程式是安全的.  codice_2函式的不同輸入下的呼叫棧:  中, 命令列引數多於11個字元,導致codice_2覆蓋了本地呼叫棧的資料、儲存的棧指標(EBP)以及最重要的返回地址。  攻擊也可以修改內部變數值:

  常用三種方式來對抗棧緩衝區溢位攻擊。

  棧的警惕標誌(stack canary),得名於煤礦裡的金絲雀,用於探測該災難的發生。具體辦法是在棧的返回地址的儲存位置之前放置一個整形值,該值在裝入程式時隨機確定。棧緩衝區攻擊時從低地址向高地址覆蓋棧空間,因此會在覆蓋返回地址之前就覆蓋了警惕標誌。返回返回前會檢查該警惕標誌是否被篡改。

  採取了“寫異或執行”策略(W^X, "Write XOR Execute"),即記憶體要麼可寫,要麼可執行,但二者不能兼得。這是最常用的方法,大部分桌面處理器都硬體支援不可執行標誌(no-execute flag)。
棧緩衝區溢位(stack buffer overflow或stack buffer overrun)是計算機程式把資料寫入呼叫棧上的記憶體時超出了資料結構的邊界。棧緩衝區溢位是緩衝區溢位的一種。 這會損壞相鄰資料的值,引發程式崩潰或者修改了函式返回地址從而導致執行惡意的程式。這種攻擊方式稱為stack smashing。可被用於注入可執行程式碼、接管程序的執行。是最為古老的黑客攻擊行為之一。