青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數據加載中……

[bash源碼分析] 2 尋找入口點

2. 尋找入口點

--- 獲得源碼

    直接在主頁就可以下載到了,用ubuntu的可以很方便的get到:
    apt-get source bash
    我的ubuntu是9.04,get到的是bash-3.2。沒有打debian的補丁。

--- Makefile

    bash的Makefile是由autoconf工具根據Makefile.in和configure.in來生成的。
    Makefile中只有小部分的配置是可更改的,一般來說這小部分都是不重要的部分。
    所以./configure后生成出來的Makefile與Makefile.in相比差別不大。我們把Makefile.in視為Makefile。

--- 主要依賴關系

    打開Makefile.in。從all開始跟下去。

    all -> .made -> $(Program)

    Program = bash$(EXEEXT)
    $(Program): .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP)

    LIBDEP = $(SHLIB_DEP) $(INTL_DEP) $(READLINE_DEP) $(HISTORY_DEP) $(TERMCAP_DEP) $(GLOB_DEP) \
         $(TILDE_DEP) $(MALLOC_DEP)

    BUILTINS_DEP = $(BUILTINS_LIBRARY)
    BUILTINS_LIBRARY = $(DEFDIR)/libbuiltins.a

    # Matching object files.
    OBJECTS     = shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \
           dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o \
           expr.o flags.o $(JOBS_O) subst.o hashcmd.o hashlib.o mailcheck.o \
           trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \
           alias.o array.o arrayfunc.o braces.o bracecomp.o bashhist.o \
           bashline.o $(SIGLIST_O) list.o stringlib.o locale.o findcmd.o redir.o \
           pcomplete.o pcomplib.o syntax.o xmalloc.o $(SIGNAMES_O)

    簡要的看了一下,LIBDEP和BUILTINS_DEP是一些靜態庫,單獨實現一些功能的模塊。我們可以先不看。
    而OBJECTS看起來就是bash的核心部分了。
    其中形似$(xxx_O)的變量是在./configure中指定的,不用理會。

--- 關鍵文件列表

    整理了一下

   1795 shell.c
    275 eval.c
   6277 y.tab.c
   1029 general.c
    856 make_cmd.c
   1307 print_cmd.c
    329 dispose_cmd.c
   4143 execute_cmd.c
   4270 variables.c
    422 copy_cmd.c
    452 error.c
   1348 expr.c
    355 flags.c
   8140 subst.c
    196 hashcmd.c
    442 hashlib.c
    438 mailcheck.c
    983 trap.c
    627 input.c
    318 unwind_prot.c
    438 pathexp.c
    595 sig.c
    825 test.c
     83 version.c
    574 alias.c
    932 array.c
    837 arrayfunc.c
    630 braces.c
    200 bracecomp.c
    823 bashhist.c
   3199 bashline.c
    137 list.c
    284 stringlib.c
    509 locale.c
    598 findcmd.c
   1086 redir.c
   1394 pcomplete.c
    225 pcomplib.c
    193 xmalloc.c
  47564 總用量

    可見bash并不是個省油的燈,區區30多個核心文件就4w多行代碼。比linux0.11還大。
    其中的subst.c更是巔峰造極,8000行。

    統計一下bash工程的總代碼量:
    find -name '*.[ch]' | xargs cat | wc -l
    結果是13w+行。。真挺多的


--- 入口點

    這么多文件,沒有理由一個個去找main函數。首先在源碼根目錄下執行ctags -R *。
    ctags看源碼的時候也會用到的。然后 vi -t main。就可以列出所有main函數的定義。
    這時候我們發現有幾十個main函數,就像劍圣的分身一樣,真假難辯。
    從程序員的直覺可以得出shell.c里面的main函數是真身。
    其他的main函數都是測試用的。
    形如:
    #ifdef xxx_TEST
    main() { ... }
    #endif
      
    下一篇我們就從 shell.c 里的 main 開始分析。


--- bash 的生日

    shell.c 文件開頭的那一段注釋尾部:
    ...
    Birthdate:
    Sunday, January 10th, 1988.
    Initial author: Brian Fox
    */
   
    bash 居然已經誕生了20多年了,比我還大9個月。這么說來,也是個80后呢。
    呵呵,bash 都算是個富二代了:
    貴族出身(GNU),身邊不乏追求者(貢獻者),還搭上了一個90后mm(linux)。


posted on 2010-07-25 10:18 糯米 閱讀(1805) 評論(1)  編輯 收藏 引用 所屬分類: Misc

評論

# re: [bash源碼分析] 2 尋找入口點  回復  更多評論   

樓主最后那一段話太幽默了!
2010-11-01 00:54 | Serval
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美精品在线观看| 亚洲在线日韩| 免费91麻豆精品国产自产在线观看| 91久久精品国产91久久性色tv | 亚洲免费福利视频| 狠狠色丁香久久婷婷综合丁香| 国产精品久久久久久影视| 99精品国产在热久久| 欧美一区二区视频在线| 国模一区二区三区| 女生裸体视频一区二区三区| 一区二区三区日韩精品| 精品不卡在线| 国产综合色精品一区二区三区| 欧美体内she精视频| 久久久噜噜噜久久人人看| 美玉足脚交一区二区三区图片| 噜噜爱69成人精品| 亚洲欧美国产精品va在线观看| 亚洲午夜激情| 日韩午夜av在线| 亚洲欧美自拍偷拍| 伊人久久大香线蕉综合热线| 亚洲国产视频直播| 99精品欧美一区二区三区综合在线| 久久夜色精品国产欧美乱极品| 欧美承认网站| 黄色成人在线观看| 性欧美video另类hd性玩具| 欧美视频在线观看| 亚洲午夜视频在线| 欧美中文字幕| 国产午夜精品美女毛片视频| 久久se精品一区精品二区| 国产在线不卡精品| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲一区二区黄| 久久美女艺术照精彩视频福利播放| 欧美大片在线影院| 国产精品美女久久久免费 | 午夜欧美不卡精品aaaaa| 午夜精品影院| 一区二区三区四区精品| 久久综合精品一区| 亚洲欧美日本另类| 欧美性一二三区| 日韩视频在线免费观看| 久久综合伊人77777蜜臀| 亚洲午夜av在线| 欧美日韩免费视频| 亚洲理论在线| 欧美第一黄色网| 久久久www成人免费无遮挡大片| 国产精品va在线播放我和闺蜜| 亚洲精品在线观| 欧美成人一区二区在线| 久久精品91| 欧美在线观看视频一区二区| 国产精品三级久久久久久电影| 国内精品模特av私拍在线观看| 欧美精品一区二区三区久久久竹菊| 欧美专区18| 亚洲第一精品在线| 国产精品天天看| 日韩亚洲视频| 91久久国产自产拍夜夜嗨| 久久九九国产精品| 久久久精品国产免大香伊| 亚洲视频免费在线观看| 国产麻豆一精品一av一免费| 欧美一区在线直播| 久久精品在线观看| 久久久久久999| 日韩一区二区免费高清| 欧美精品二区| 亚洲剧情一区二区| 欧美精品一区二区三区蜜桃 | 国产区欧美区日韩区| 亚洲狼人综合| 亚洲欧洲精品一区二区三区| 久久精品亚洲热| 亚洲最新视频在线| 榴莲视频成人在线观看| 奶水喷射视频一区| 亚洲免费高清视频| 又紧又大又爽精品一区二区| 久久男女视频| 国产精品成人一区二区三区夜夜夜| 欧美日韩裸体免费视频| 99精品欧美| 免费国产一区二区| 亚洲精品人人| 午夜久久福利| 亚洲国产一成人久久精品| 亚洲毛片一区二区| 国产日韩欧美中文在线播放| 蜜臀av在线播放一区二区三区| 欧美中文在线字幕| 国产精品美女诱惑| 亚洲一区二区三区精品动漫| 亚洲欧美怡红院| 国产日韩欧美高清免费| 午夜在线视频一区二区区别| 亚洲在线一区二区三区| 亚洲午夜久久久| 久久综合色影院| 欧美激情一区二区久久久| 国产欧美一区二区色老头 | 亚洲色图自拍| 在线观看亚洲一区| 亚洲尤物视频在线| 伊人狠狠色j香婷婷综合| 欧美激情精品久久久久久久变态 | 欧美日韩精品二区第二页| 亚洲激情女人| 欧美伊人久久| 久久精品最新地址| 欧美午夜精品久久久久久浪潮 | 欧美激情女人20p| 亚洲精品美女在线观看播放| 亚洲第一在线综合在线| 亚洲女同精品视频| 久久综合狠狠综合久久综合88| 欧美一区二区三区四区在线观看| 在线成人激情黄色| 亚洲精品美女| 国产综合网站| 这里只有精品视频| 亚洲理伦在线| 久久超碰97中文字幕| 欧美日本在线视频| 久久亚洲视频| 国产欧美一区二区精品性色| 夜夜嗨av一区二区三区四季av | 欧美福利视频| 欧美激情精品久久久| 影音先锋久久| 久久久欧美一区二区| 久久久成人精品| 国产在线乱码一区二区三区| 亚洲欧美日韩精品久久亚洲区| 国产精品久久久久毛片大屁完整版 | 夜夜嗨av一区二区三区网页| 久久综合九色综合网站| 亚洲美女av在线播放| 国产亚洲欧美另类中文| 午夜一区二区三区不卡视频| 国产精品99久久久久久宅男| 国产精品久久久久久久久动漫| 亚洲自拍偷拍麻豆| 欧美一区激情视频在线观看| 亚洲第一久久影院| 亚洲理论在线| 一本色道久久综合亚洲精品婷婷| 国产精品美女www爽爽爽| 久久九九99| 欧美日韩一区二区高清| 久久爱www.| 欧美日韩精品一区二区三区| 亚洲免费在线观看视频| 99视频一区二区| 嫩草伊人久久精品少妇av杨幂| 久久av老司机精品网站导航| 国产日韩欧美综合| 久久美女性网| 麻豆乱码国产一区二区三区| 亚洲三级视频| 久久久一区二区三区| 欧美成人国产| 亚洲欧洲另类| 亚洲自拍偷拍麻豆| 老司机久久99久久精品播放免费| 亚洲综合日韩| 国产亚洲午夜| 亚洲性视频网址| 亚洲视频久久| 亚洲精品中文字幕有码专区| 欧美激情视频免费观看| 亚洲综合不卡| 国产精品一二一区| 狠狠久久亚洲欧美专区| 久久另类ts人妖一区二区 | 亚洲欧洲在线一区| 久久国产99| 国产精品你懂得| 亚洲欧美一级二级三级| 久久伊人免费视频| 先锋a资源在线看亚洲| 欧美成人情趣视频| 久久久久国产免费免费| 国产精品家庭影院| 日韩午夜av在线| 亚洲精品久久久久久久久| 欧美中文字幕视频在线观看| 香蕉成人啪国产精品视频综合网| 免费成人av资源网| 欧美高清成人| 99成人在线| 国产精品高精视频免费| 一区二区三区福利|