最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C語言最短的崩潰程序分析

本篇內(nèi)容主要講解“C語言最短的崩潰程序分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C語言最短的崩潰程序分析”吧!

創(chuàng)新互聯(lián)建站是專業(yè)的蘇尼特左網(wǎng)站建設(shè)公司,蘇尼特左接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行蘇尼特左網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

通常學(xué)生們要么嘗試反向引用一個非法地址,要么就是除0.除0會引發(fā)SIGFPE信號(浮點異常)。這里有一個小例子程序,使用除零方法來使之崩潰:

int main()  {      return 1/0;  }

我們也可以刪掉return關(guān)鍵字,但是當(dāng)我這么做的時候gcc不會為這些語句生成可執(zhí)行代碼,即便優(yōu)化選項被disable掉了。我們還可以通過把上面的語句改成賦值語句,使上面的代碼改變一些特征:

i;  int main()  {      i=1/0;  }

注意我聲明了一個沒有類型的i。這樣的代碼在C89標(biāo)準(zhǔn)里是有效的,因為所有的聲明都有隱形的缺省類型int。在C99和其他一些C標(biāo)準(zhǔn)里這是一個錯誤。假定我們寫的是C89代碼,那么我們甚至可以使用隱形int來聲明main函數(shù):

i;  main()  {      i=1/0;  }

那是相當(dāng)短的代碼了 — 如果我們不把用于縮進(jìn)的空格計算進(jìn)來,只有16個字符。然而,我們還可以做得更好!

當(dāng)C程序在編譯的時候,編譯器會產(chǎn)生一個或更多對象文件,文件里有對于用到的庫和全程對象(函數(shù)和變量)的符號索引。然后這些對象文件會被進(jìn)行鏈接,這時符號索引被地址所代替,就產(chǎn)生了一個可執(zhí)行文件。

編譯器在一個對象文件里提供了一個調(diào)用main函數(shù)的入口點。調(diào)用main函數(shù)意味著我們試圖執(zhí)行在存儲在main函數(shù)鏈接的位置所對應(yīng)地址里的指令。

有趣的是,鏈接器對于不同對象的類型是沒有概念的,它只知道它們的地址。所以,如果我們用一個常規(guī)的全程變量替換main函數(shù),編譯器會高興地build對象文件,因為它不關(guān)心對象main的類型是什么;鏈接器也會高興地鏈接它,因為它只關(guān)心main函數(shù)對應(yīng)的地址。

所以,考慮這個C程序:

int main=0;

這個程序會編譯成一個可執(zhí)行文件,它會試圖調(diào)用地址0,而0并不是我們能夠訪問的地址,這樣我們會得到SIGSEGV信號(分段錯誤)。

更正:我前面關(guān)于這個程序崩潰的原因分析是錯的。這個程序會試圖按函數(shù)方式去執(zhí)行main,而這樣不會奏效,因為編譯器把它放到了不可執(zhí)行的數(shù)據(jù)段。所以變量main初始化為什么值都無所謂了。(感謝Zack的糾正)

現(xiàn)在我們已經(jīng)非常接近最小的崩潰的C程序了。我們可以利用這個技巧,配合隱形int類型,來把它進(jìn)一步縮短。

main=0;

還有,C里的全局變量都會隱形地初始化為0,所以上面的代碼就等同于:

main;

好了,現(xiàn)在我們得到了最短的崩潰的C程序!

補(bǔ)充:

Hacker News用戶femto指出,編譯和鏈接一個空文件也是可能的。我沒有發(fā)布這個是因為gcc會拒絕編譯和鏈接這樣的程序,它會要求分開編譯和鏈接的過程。

到此,相信大家對“C語言最短的崩潰程序分析”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


本文名稱:C語言最短的崩潰程序分析
當(dāng)前URL:http://fisionsoft.com.cn/article/ijshos.html