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

糯米

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 糯米 閱讀(1814) 評論(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| 激情综合网址| 欧美激情一区二区三区在线视频观看 | 中文在线一区| 国产精品少妇自拍| 久久久久久噜噜噜久久久精品| 午夜日韩电影| 亚洲激情一区二区| 99亚洲一区二区| 国产亚洲免费的视频看| 女仆av观看一区| 欧美日韩精品一本二本三本| 亚洲在线成人| 久久久久久高潮国产精品视| 亚洲麻豆国产自偷在线| 夜夜爽夜夜爽精品视频| 国产午夜精品久久久| 欧美顶级少妇做爰| 欧美午夜电影网| 免费日韩av片| 国产精品二区三区四区| 久久久亚洲午夜电影| 欧美二区不卡| 久久国产日韩欧美| 欧美片第1页综合| 久久久999成人| 欧美日韩亚洲视频| 欧美1级日本1级| 国产欧美精品国产国产专区| 亚洲国产精品久久久| 国产欧美日韩中文字幕在线| 欧美激情一区二区三区成人 | 久久亚洲一区二区| 欧美精品一卡| 久久精品二区亚洲w码| 欧美喷水视频| 欧美成人蜜桃| 国产精品在线看| 亚洲精品一区中文| 亚洲高清视频在线| 欧美一区二区三区在线播放| 中文精品在线| 欧美电影在线免费观看网站| 久久天堂精品| 国产情侣一区| 亚洲欧美日韩一区在线观看| 99视频精品全国免费| 麻豆精品在线视频| 久久国产精品久久w女人spa| 欧美系列电影免费观看| 亚洲国产成人一区| 亚洲国产福利在线| 久久精品导航| 久久久91精品国产一区二区精品| 欧美午夜不卡| 一本久久综合亚洲鲁鲁| 亚洲伦理在线| 欧美韩日一区二区三区| 欧美激情精品久久久六区热门| 黄色成人在线观看| 午夜日韩电影| 久久综合亚州| 伊人久久亚洲美女图片| 久久久福利视频| 欧美成人精品影院| 亚洲国产日韩在线| 欧美电影在线播放| 亚洲每日在线| 午夜精品福利一区二区蜜股av| 欧美婷婷六月丁香综合色| 一区二区三区福利| 亚洲欧美国产一区二区三区| 国产精品久久亚洲7777| 亚洲一区二区在| 久久久久久久久久久久久女国产乱| 国产日韩欧美成人| 久久婷婷国产麻豆91天堂| 欧美激情一区二区久久久| 一本到高清视频免费精品| 欧美日韩影院| 午夜久久久久| 欧美大片在线观看| 中文国产成人精品| 国产日韩欧美夫妻视频在线观看| 久久精品人人做人人综合| 欧美国产日韩a欧美在线观看| 日韩亚洲欧美成人一区| 国产精品久久久久久妇女6080| 亚洲欧美精品| 欧美激情在线免费观看| 中文网丁香综合网| 国内视频一区| 欧美精品午夜| 欧美专区在线观看| 亚洲欧洲一区二区天堂久久| 亚洲欧美日韩系列| 亚洲第一区在线观看| 欧美日韩一二三四五区| 午夜综合激情| 亚洲黄色免费| 久久成人精品一区二区三区| 亚洲国产精品一区二区第一页| 欧美视频一区二区三区…| 久久久久久电影| 亚洲一区二区成人| 蜜臀久久99精品久久久画质超高清 | 欧美日韩亚洲综合一区| 久久不射2019中文字幕| aa国产精品| 亚洲国产精品精华液2区45| 亚洲欧美一区在线| 亚洲另类黄色| 在线观看一区视频| 欧美系列一区| 欧美破处大片在线视频| 久久日韩粉嫩一区二区三区| 亚洲一区免费视频| 亚洲精品一区二区三区樱花| 免费黄网站欧美| 久久免费午夜影院| 香蕉成人伊视频在线观看| 9i看片成人免费高清| 亚洲成色最大综合在线| 国产日产亚洲精品系列| 欧美日韩精品久久| 欧美成人精品在线观看| 久久一区中文字幕| 欧美一区二区视频在线| 亚洲男女自偷自拍| 在线视频一区二区| 日韩性生活视频| 亚洲日本理论电影| 亚洲日本一区二区三区| 欧美电影在线播放| 欧美成人亚洲成人| 欧美国产亚洲另类动漫| 免费在线日韩av| 麻豆精品视频在线| 美女免费视频一区| 免费观看国产成人| 男同欧美伦乱| 亚洲国产精品久久久久| 亚洲国产99精品国自产| 欧美韩日一区二区| 欧美国产日韩一区二区三区| 亚洲电影在线播放| 亚洲国产视频一区| 亚洲精品免费网站| 妖精成人www高清在线观看| 9色porny自拍视频一区二区| 这里只有视频精品| 亚洲永久在线观看| 欧美一区二区高清| 久久三级视频| 欧美精品观看| 国产精品久久久久久久久搜平片| 国产精品美女主播在线观看纯欲| 国产精品福利av| 国产香蕉久久精品综合网| 伊人精品成人久久综合软件| 亚洲成在线观看| 日韩视频在线观看国产| 亚洲一区二区三区四区视频| 午夜精品一区二区三区在线播放 | 亚洲人成在线观看网站高清| 一区二区三区国产盗摄| 亚洲综合欧美| 久久蜜桃香蕉精品一区二区三区| 欧美高清视频一区二区三区在线观看| 亚洲国产一区视频| 国产精品99久久久久久久vr| 欧美一级电影久久| 免费视频亚洲| 国产精品网曝门| 黄色成人小视频| 亚洲天堂av电影| 能在线观看的日韩av| 99视频在线精品国自产拍免费观看| 亚洲欧美综合国产精品一区| 老司机午夜精品视频在线观看| 欧美天堂亚洲电影院在线观看 | 国产综合18久久久久久| 亚洲日本激情| 久久精品国产精品| 最新日韩精品| 久久精品一本| 国产精品久久久久久户外露出 | 日韩小视频在线观看| 欧美在线视频一区| 亚洲美女在线看| 久久婷婷麻豆| 国产亚洲综合在线| 一区二区欧美在线| 亚洲第一二三四五区| 欧美在线视频一区二区| 欧美日韩在线一区二区三区| 亚洲国产日韩欧美一区二区三区| 欧美一区视频|