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

糯米

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>
            韩国久久久久| 亚洲人体1000| 久久一区国产| 久久久久久久精| 久久精品亚洲一区二区| 久久精品国产999大香线蕉| 久久成人免费视频| 久久伊伊香蕉| 欧美电影免费观看网站| 欧美日韩少妇| 国产一区清纯| 亚洲精品国产系列| 亚洲欧美在线观看| 蜜桃视频一区| 亚洲视频网在线直播| 欧美一级在线视频| 欧美激情亚洲激情| 国产欧美另类| 亚洲全黄一级网站| 欧美一区2区三区4区公司二百| 久久久青草婷婷精品综合日韩| 欧美成人久久| 亚洲视频观看| 免费不卡在线观看| 国产精品日韩专区| 亚洲日韩欧美视频一区| 欧美主播一区二区三区美女 久久精品人 | 欧美日韩一区二区三区视频| 国产精品www| 在线观看成人一级片| 一区二区日本视频| 亚洲激情成人网| 午夜久久黄色| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产精品video| 永久免费精品影视网站| 亚洲一区在线直播| 亚洲国产高清视频| 亚洲伊人久久综合| 你懂的网址国产 欧美| 国产一区99| 亚洲嫩草精品久久| 亚洲精品视频一区| 老色鬼久久亚洲一区二区| 国产欧美短视频| 日韩亚洲视频在线| 一区二区欧美日韩| 欧美一区二区三区电影在线观看| 欧美丰满高潮xxxx喷水动漫| 亚洲精品美女久久久久| 一区二区三区高清在线| 欧美69视频| 亚洲一级黄色片| 欧美激情女人20p| 国产一区二区0| 亚洲一区二区三区乱码aⅴ蜜桃女| 免费观看一区| 久久久亚洲成人| 激情成人av| 玖玖玖国产精品| 久久久久国产精品www| 国产亚洲人成网站在线观看| 午夜久久黄色| 亚洲在线黄色| 国产欧美精品在线| 午夜天堂精品久久久久| 亚洲天堂网站在线观看视频| 欧美日韩日韩| 亚洲深夜av| 亚洲婷婷综合色高清在线| 国产精品九九久久久久久久| 午夜精品福利一区二区蜜股av| 亚洲婷婷综合色高清在线| 国产精品激情电影| 欧美影院成人| 久久婷婷麻豆| 亚洲看片网站| 亚洲视频在线观看视频| 国产欧美日韩精品丝袜高跟鞋 | 你懂的视频欧美| 久久久另类综合| 亚洲精选91| 亚洲色图在线视频| 国产欧美一区二区精品婷婷| 久久久久久久综合| 蜜臀va亚洲va欧美va天堂| 9i看片成人免费高清| 亚洲天堂免费在线观看视频| 国外视频精品毛片| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品老牛| 噜噜噜噜噜久久久久久91| 欧美激情视频在线免费观看 欧美视频免费一 | av成人免费观看| 国产亚洲永久域名| 亚洲国产精品www| 欧美日韩和欧美的一区二区| 午夜精品成人在线| 久久久久久成人| 亚洲影院在线| 女人香蕉久久**毛片精品| 午夜亚洲影视| 欧美精品自拍| 猛男gaygay欧美视频| 欧美视频一区二区三区…| 久久亚洲国产成人| 国产精品video| 亚洲高清在线观看| 国产亚洲aⅴaaaaaa毛片| 亚洲精品国精品久久99热| 好吊妞这里只有精品| 亚洲视频在线观看免费| 99这里有精品| 欧美成人精品在线播放| 久久综合999| 国产欧美日韩精品一区| 一级日韩一区在线观看| 亚洲精选视频免费看| 久久综合五月| 蜜桃久久精品一区二区| 国内精品久久久久久久影视麻豆 | 国产精品国产精品| 亚洲国产精品www| 在线精品福利| 久久久久免费观看| 久久嫩草精品久久久久| 国产日韩在线亚洲字幕中文| 亚洲一区二区久久| 中文av一区特黄| 欧美精品在欧美一区二区少妇| 久热爱精品视频线路一| 国产欧美日韩一区二区三区| 制服诱惑一区二区| 亚洲一级一区| 国产精品日韩二区| 亚洲女女做受ⅹxx高潮| 性久久久久久久| 国产区日韩欧美| 久久激情综合| 欧美成人一区二区在线| 亚洲国产成人高清精品| 毛片av中文字幕一区二区| 欧美国产日韩一区二区在线观看| 在线免费观看日本一区| 久久久久久伊人| 亚洲福利视频三区| 99视频一区二区| 欧美日韩综合久久| 亚洲一区精品视频| 久久九九精品99国产精品| 国内精品久久久久伊人av| 久久精品综合一区| 欧美激情精品久久久久久黑人 | 久久中文字幕一区| 欧美激情第六页| 夜夜精品视频| 欧美视频免费在线观看| 在线视频精品一区| 久久国产精品一区二区| 国产在线视频欧美| 麻豆精品一区二区av白丝在线| 亚洲精品欧美在线| 欧美亚洲免费电影| 亚洲国产精品一区二区www| 欧美a级片一区| 在线亚洲一区| 久久久免费精品| aa成人免费视频| 国产综合久久久久久| 欧美美女福利视频| 欧美一区=区| 亚洲人成在线观看网站高清| 亚洲视频精品| 亚洲第一页中文字幕| 欧美少妇一区二区| 久久久国产视频91| 一区二区三区免费观看| 嫩模写真一区二区三区三州| 亚洲一区二区三区在线视频| 狠狠色丁香婷婷综合| 欧美日韩一区在线| 玖玖国产精品视频| 亚洲在线观看| 91久久精品网| 另类人畜视频在线| 欧美在线一二三四区| av成人毛片| 亚洲福利国产精品| 国产亚洲毛片在线| 国产精品久久久久久久7电影| 狼人天天伊人久久| 欧美在线看片a免费观看| 一区二区国产在线观看| 亚洲国产精品ⅴa在线观看| 久久久久一区| 久久精品观看| 久久成人亚洲| 欧美一区观看| 亚洲欧美一区二区精品久久久| 日韩午夜三级在线|