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

糯米

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 糯米 閱讀(1810) 評論(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>
            国产精品久久77777| 亚洲乱码精品一二三四区日韩在线| 男人的天堂亚洲在线| 亚洲精品乱码久久久久久按摩观 | 国产亚洲欧美日韩日本| 久久精品久久99精品久久| 欧美亚洲尤物久久| 亚洲影院免费观看| 亚洲一区二区三区精品在线| 亚洲一区二区欧美| 欧美一区二区视频在线| 久久三级视频| 欧美国产另类| 国产精品视频福利| 欧美视频不卡中文| 国产精品爽黄69| 国产精品日日做人人爱| 国产精品美女视频网站| 久久国产精品99精品国产| 欧美一区二区在线免费观看| 久久精品欧美| 亚洲免费电影在线观看| 先锋资源久久| 欧美日韩一区在线视频| 黄色av一区| 亚洲综合日韩中文字幕v在线| 亚洲午夜激情网站| 亚洲国产高清视频| 久久精品九九| 国产精品国产三级国产普通话99| 在线观看欧美视频| 欧美在线视频一区二区| 一区二区三欧美| 欧美日韩三级视频| 亚洲免费观看| 男女av一区三区二区色多| 亚洲国产日韩欧美在线动漫| 欧美在线国产精品| 国产一区二区三区四区| 午夜亚洲一区| 香蕉久久夜色| 国内精品视频在线观看| 欧美一区二区视频97| 午夜激情综合网| 国内外成人免费视频 | 欧美日韩国产另类不卡| 日韩午夜精品视频| 日韩视频在线观看国产| 国产精品外国| 蜜臀91精品一区二区三区| 夜夜躁日日躁狠狠久久88av| 久久精品欧美日韩精品| 国产一区二区三区免费观看| 欧美在线日韩在线| 亚洲欧美国产制服动漫| 亚洲电影专区| 亚洲美女中出| 亚洲第一主播视频| 一区电影在线观看| 亚洲国产免费看| 亚洲字幕一区二区| 久久综合久久综合这里只有精品| 欧美日韩中文字幕| 一本不卡影院| 久久只有精品| 亚洲精品网址在线观看| 香蕉尹人综合在线观看| 久久综合色一综合色88| 午夜精品剧场| 欧美久久一级| 亚洲高清不卡| 亚洲电影av| 韩日成人av| 欧美一级大片在线观看| 一本久久综合| 欧美国产日本韩| 久久亚洲美女| 在线视频精品一区| 欧美大色视频| 亚洲免费观看视频| 亚洲一卡二卡三卡四卡五卡| 国产精品日本| 另类人畜视频在线| 亚洲国产成人久久综合一区| 日韩视频免费观看高清在线视频| 欧美激情免费在线| 国产日韩综合| 欧美韩日一区| 午夜精品一区二区三区四区| 久久综合狠狠| 一本色道久久综合亚洲二区三区| 欧美日韩国产大片| 欧美一区二区三区在线免费观看 | 国产精品视区| 小处雏高清一区二区三区| 亚洲网址在线| 久久爱www久久做| 久久理论片午夜琪琪电影网| 欧美激情精品久久久久久大尺度| 一区二区电影免费观看| 国内精品久久久久久| 欧美日在线观看| 欧美电影免费观看大全| 欧美在线一区二区| 亚洲午夜精品国产| 亚洲美女毛片| 亚洲国产精品美女| 欧美暴力喷水在线| 免费看成人av| 欧美国产日本高清在线| 牛牛影视久久网| 夜夜嗨av一区二区三区| 看欧美日韩国产| 噜噜噜91成人网| 亚洲国产精彩中文乱码av在线播放| 欧美日韩成人综合天天影院| 免费国产一区二区| 久久久精品免费视频| 久久久久在线| 欧美二区在线看| 国产精品日韩精品欧美在线| 一区二区高清视频| 亚洲在线免费视频| 久久国产精品99精品国产| 性色av一区二区三区在线观看 | 欧美视频一区二区三区| 国产精品久久影院| 亚洲国产精品久久久久婷婷884| 亚洲乱码国产乱码精品精可以看| 午夜精品在线看| 亚洲精品久久久久久久久| 香蕉亚洲视频| 国产综合欧美在线看| 亚洲欧美高清| 欧美国内亚洲| 亚洲人成网站在线播| 一区二区免费在线视频| 亚洲欧美日韩在线一区| 欧美 日韩 国产 一区| 日韩午夜视频在线观看| 久久精品女人的天堂av| 国产精品视频最多的网站| 欧美a级片网| 一区二区精品国产| 久久av一区二区| 亚洲国产精品久久| 日韩一区二区高清| 欧美激情综合色| 亚洲大胆av| 美女91精品| 久久久www成人免费无遮挡大片| 国产精品播放| 久久精品30| 亚洲免费在线视频一区 二区| 噜噜爱69成人精品| 亚洲国产另类久久精品| 欧美国产日本| 另类天堂视频在线观看| 亚洲影院色无极综合| 中文精品视频| 欧美日本亚洲韩国国产| 日韩一级黄色av| 亚洲自拍都市欧美小说| 在线观看精品一区| 亚洲国产视频a| 欧美福利视频在线观看| 欧美日韩情趣电影| 午夜精品久久99蜜桃的功能介绍| 亚洲一区二区网站| 亚洲激情另类| 午夜久久电影网| 亚洲天堂第二页| 免费在线看成人av| 久久久国产精品一区二区中文| 欧美高清一区| 欧美激情久久久久久| 国产亚洲精品一区二区| 一区二区三区 在线观看视频| 亚洲区一区二| 美女精品自拍一二三四| 久久久久国内| 国产欧美日韩视频一区二区| 亚洲女人小视频在线观看| 国产欧美一区二区三区另类精品| 欧美激情一区三区| 亚洲国产色一区| 免费观看一区| 亚洲精品国产精品国产自| 在线色欧美三级视频| 久久另类ts人妖一区二区| 久久国内精品自在自线400部| 国产精品视频专区| 亚洲欧美日本在线| 久久久久久久网站| 精品动漫一区| 男男成人高潮片免费网站| 亚洲精品国产精品乱码不99按摩| 亚洲区第一页| 国产精品久久夜| 久热精品视频|