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

糯米

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>
            亚洲午夜激情在线| 在线播放不卡| 国产日产高清欧美一区二区三区| 亚洲午夜精品视频| 亚洲图片自拍偷拍| 国产日韩专区| 免费视频亚洲| 欧美久久久久久久久久| 妖精成人www高清在线观看| 亚洲剧情一区二区| 国产精品久久| 美玉足脚交一区二区三区图片| 久久亚洲午夜电影| 99在线精品视频在线观看| 亚洲美女视频在线免费观看| 国产精品乱码一区二区三区| 久久精品国产亚洲一区二区| 久久影音先锋| 亚洲性av在线| 久久精品亚洲| 一本色道久久综合亚洲精品小说| 亚洲一区久久久| 精品88久久久久88久久久| 亚洲国产成人精品女人久久久| 欧美黑人一区二区三区| 亚洲欧美日韩在线不卡| 久久精品人人做人人爽电影蜜月| 亚洲精品视频免费观看| 亚洲欧美文学| 99视频精品免费观看| 欧美有码在线视频| 亚洲美女视频网| 西瓜成人精品人成网站| 一本色道久久综合亚洲精品按摩 | 亚洲国产成人精品久久| 在线综合视频| 亚洲电影欧美电影有声小说| 一区二区国产精品| 亚洲国产精品一区二区尤物区| 亚洲视频axxx| 亚洲精品一区在线观看香蕉| 性欧美videos另类喷潮| 99精品欧美一区二区蜜桃免费| 性伦欧美刺激片在线观看| 亚洲午夜精品久久| 欧美高清在线观看| 美女主播视频一区| 国产亚洲欧美激情| 亚洲伊人久久综合| 一区二区三区 在线观看视频| 久久久久久久一区二区| 欧美在线播放| 国产精品福利在线| 亚洲三级视频在线观看| 亚洲激情影院| 美女被久久久| 美女精品国产| 韩国精品久久久999| 亚洲欧美日韩在线综合| 午夜久久久久久| 国产精品第一区| 国产精品久久久久免费a∨大胸| 亚洲国产日韩美| 久久九九热免费视频| 久久黄色级2电影| 国产精品自拍在线| 亚洲欧美日韩人成在线播放| 亚洲专区在线视频| 欧美午夜一区二区| 这里只有视频精品| 性做久久久久久久久| 欧美午夜片在线免费观看| 亚洲毛片在线免费观看| 一区二区高清视频在线观看| 毛片av中文字幕一区二区| 欧美大色视频| 亚洲精品在线三区| 欧美日韩精品三区| 一区二区三区四区五区精品| 午夜在线一区| 国产一区999| 久久欧美中文字幕| 欧美国产精品劲爆| 正在播放欧美视频| 国产精品视频专区| 久久精品成人| 亚洲大片av| 亚洲欧美日韩一区| 韩国女主播一区| 免费在线亚洲| 99精品国产热久久91蜜凸| 小嫩嫩精品导航| 精品999网站| 欧美人与性动交a欧美精品| 亚洲精品美女在线| 亚洲美女在线国产| 国产精品久久久久影院色老大 | 亚洲一区尤物| 国产午夜精品全部视频在线播放| 久久精品国产99国产精品澳门| 欧美国产先锋| 亚洲在线免费观看| 伊人精品在线| 欧美日本网站| 久久精品一区二区三区不卡牛牛 | 亚洲私拍自拍| 在线播放国产一区中文字幕剧情欧美| 欧美电影免费| 欧美一区国产在线| 亚洲国产婷婷香蕉久久久久久| 一区二区三区导航| 国产色产综合产在线视频| 欧美激情免费在线| 久久久精品欧美丰满| 亚洲视屏在线播放| 亚洲福利视频网站| 久久久久久久综合狠狠综合| 艳女tv在线观看国产一区| 精久久久久久| 国产欧美日韩中文字幕在线| 欧美精品三级| 麻豆国产精品va在线观看不卡| 亚洲特级片在线| 亚洲精品婷婷| 欧美成人高清视频| 久久超碰97中文字幕| 亚洲一区二区三区777| 亚洲欧洲精品一区| 精品1区2区| 国内精品久久久久影院优| 国产精品美女久久久久久免费 | 亚洲一区二区精品| 亚洲日韩视频| 欧美第一黄网免费网站| 新狼窝色av性久久久久久| 伊人久久综合97精品| 国内精品视频在线观看| 国产伦精品一区二区三| 欧美系列精品| 欧美四级剧情无删版影片| 欧美美女日韩| 欧美日韩高清免费| 欧美ed2k| 欧美精品九九| 欧美日韩另类字幕中文| 欧美精品色网| 欧美国产乱视频| 欧美看片网站| 欧美日韩一卡二卡| 欧美日韩视频在线一区二区观看视频| 欧美国产日韩免费| 欧美日本一区二区三区 | 性色av香蕉一区二区| 午夜精品久久久久久99热软件| 亚洲视频中文字幕| 亚洲欧美韩国| 久久精品免费观看| 久久影院午夜论| 欧美激情一区二区三区四区| 欧美激情视频在线播放| 欧美日韩在线一区二区| 国产精品美女主播| 国产亚洲人成网站在线观看| 国语自产偷拍精品视频偷| 尤物精品在线| 一本色道久久综合一区| 香蕉精品999视频一区二区| 久久精品三级| 亚洲丰满在线| 亚洲夜间福利| 久久久久这里只有精品| 欧美精品三级日韩久久| 国产美女精品在线| 亚洲高清成人| 亚洲欧美日韩一区二区三区在线观看| 欧美一区午夜精品| 欧美激情小视频| 亚洲午夜高清视频| 久热成人在线视频| 国产精品a级| 在线高清一区| 亚洲一区二区三区中文字幕| 玖玖视频精品| 日韩视频免费| 久久久久久电影| 欧美日韩一区二区高清| 国产在线精品二区| 亚洲无线一线二线三线区别av| 久久人人97超碰国产公开结果| 亚洲欧洲在线视频| 欧美一区午夜精品| 欧美午夜视频在线观看| 亚洲欧洲另类| 久久久久久综合网天天| 一本色道久久综合亚洲精品婷婷| 久久国产加勒比精品无码| 欧美日韩在线观看视频| 亚洲国产另类久久久精品极度| 亚洲欧美日韩精品在线| 91久久综合|