當前位置:編程學習大全網 - 編程軟體 - 怎麽在stack overflow提問時插入大段代碼

怎麽在stack overflow提問時插入大段代碼

stackoverflow(堆棧溢出)就是不顧堆棧中分配的局部數據塊大小,向該數據塊寫入了過多的數據,導致數據越界,結果覆蓋了老的堆棧數據。或者解釋為在長字符串中嵌入壹段代碼,並將過程的返回地址覆蓋為這段代碼的地址,這樣當過程返回時,程序就轉而開始執行這段自編的代碼了。比如如下這段程序:#includeintmain(){charname[8];printf("Pleasetypeyourname:");gets(name);printf("Hello.%s!",name);return0;}編譯並且執行,輸入ipxodiAAAAAAAAAAAAAAAA,執行完gets(name)之後,堆棧如下:內存底部內存頂部nameEBPret<-------[ipxodiAA][AAAA][AAAA]^&name堆棧頂部堆棧頂部由於我們輸入的name字符串太長,name數組容納不下,只好向內存頂部繼續寫'A'。由於堆棧的生長方向與內存的生長方向相反,這些'A’覆蓋了堆棧的老的元素。'EBPret’都被'A'覆蓋了。在main返回的時候,就會把'AAAA'的ASCII碼:0x41414141作為返回地址,CPU會試圖執行0x41414141處的指令,結果出現錯誤。這就是壹次堆棧溢出!

  • 上一篇:超過80%的德國留學生畢業後會離開德國,德國為何留不住人才?
  • 下一篇:桑達大屏幕手寫手機型號
  • copyright 2024編程學習大全網