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

糯米

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>
            亚洲欧美日韩精品一区二区 | 亚洲女ⅴideoshd黑人| 久久精品女人的天堂av| 亚洲精品美女在线观看| 欧美顶级少妇做爰| 欧美欧美全黄| 亚洲国产三级在线| 久久婷婷久久一区二区三区| 亚洲免费小视频| 国产精品久久久久久影视| 亚洲日本黄色| 麻豆国产精品777777在线| 欧美一区二区三区四区在线 | 欧美激情四色 | 久久国产福利| 午夜精品久久久久久久久久久久久| 国产精品久久二区| 午夜久久久久久| 亚洲无线一线二线三线区别av| 欧美日韩国产999| 99精品视频免费| 日韩视频久久| 国产精品亚洲激情| 欧美在线观看视频在线| 午夜精品久久久久久| 国产亚洲欧美日韩一区二区| 久久久久久久综合| 美日韩精品免费观看视频| 亚洲激情综合| 亚洲精品影视| 国产精品mv在线观看| 亚洲一级黄色片| 香蕉久久一区二区不卡无毒影院| 国外成人在线视频网站| 麻豆久久婷婷| 欧美日韩精品欧美日韩精品 | 欧美午夜免费电影| 久久国产综合精品| 久久久久久午夜| 一本色道婷婷久久欧美| 中文精品视频| 亚洲国产99| 亚洲伦理在线观看| 国语精品中文字幕| 99精品欧美一区二区蜜桃免费| 国产午夜亚洲精品不卡| 亚洲第一精品夜夜躁人人爽| 国产精品福利在线观看网址| 久久亚洲图片| 国产精品海角社区在线观看| 久久久综合激的五月天| 欧美极品欧美精品欧美视频| 久久激情五月激情| 欧美日韩亚洲高清一区二区| 久久国内精品自在自线400部| 欧美激情第六页| 久久九九电影| 欧美视频二区36p| 欧美高清hd18日本| 国产伪娘ts一区| 亚洲美女精品成人在线视频| 亚洲第一精品在线| 性做久久久久久免费观看欧美| 日韩一级大片在线| 久久手机免费观看| 久久久999精品视频| 欧美视频观看一区| 亚洲激情二区| 亚洲第一区中文99精品| 午夜国产精品视频| 亚洲欧美福利一区二区| 欧美91精品| 老司机精品视频一区二区三区| 欧美四级在线| 亚洲第一页在线| 国产在线视频欧美| 亚洲先锋成人| 中文精品视频| 欧美日韩国产综合视频在线观看 | 在线观看国产精品网站| 亚洲综合日韩在线| 亚洲欧美精品一区| 欧美巨乳在线观看| 91久久精品www人人做人人爽| 黄色成人免费观看| 久久精品最新地址| 久久男女视频| 狠狠88综合久久久久综合网| 午夜精品短视频| 欧美日韩亚洲高清| 一区二区精品在线| 亚洲一区二区三区乱码aⅴ| 欧美日韩国产一区二区三区地区| 亚洲日韩欧美一区二区在线| 91久久精品日日躁夜夜躁欧美| 欧美电影在线| 亚洲精品网址在线观看| 亚洲一区二区三区四区在线观看| 国产精品二区在线| 欧美一级成年大片在线观看| 久久久999精品视频| 亚洲大片在线观看| 欧美大秀在线观看| 亚洲精品你懂的| 亚洲精品中文字幕女同| 欧美日韩国产精品一区二区亚洲 | 99精品视频免费观看视频| 欧美屁股在线| 亚洲小视频在线| 久久久久久色| 亚洲欧洲一区| 国产精品高清网站| 久久av免费一区| 亚洲国产小视频| 午夜一区二区三区在线观看| 国产一区二区视频在线观看| 久久男人av资源网站| 亚洲国产视频一区| 亚洲欧美在线看| 亚洲大胆美女视频| 欧美色另类天堂2015| 久久久999精品免费| 亚洲精品乱码视频| 欧美一区二区网站| 亚洲黄网站在线观看| 国产精品视频专区| 免费久久久一本精品久久区| 99精品国产高清一区二区| 日韩视频一区二区| 国产自产2019最新不卡| 欧美久久影院| 久久婷婷av| 亚洲尤物在线视频观看| 亚洲国产精品成人精品| 久久精品视频在线| 亚洲图片欧洲图片日韩av| 狠狠久久婷婷| 国产精品另类一区| 欧美激情视频在线免费观看 欧美视频免费一| 在线视频免费在线观看一区二区| 美女脱光内衣内裤视频久久影院| 亚洲一区二区高清视频| 亚洲人午夜精品| 狠狠色噜噜狠狠色综合久| 国产精品久久久久久久久搜平片 | 欧美91大片| 久久国产精品第一页| 亚洲片在线资源| 狠狠综合久久av一区二区老牛| 国产精品国产成人国产三级| 欧美岛国在线观看| 美女精品在线| 久久久久久久999精品视频| 亚洲自拍偷拍一区| 一区二区三区欧美成人| 亚洲精品色图| 日韩午夜高潮| 日韩视频免费观看| 亚洲日本欧美| 亚洲精品视频免费| 亚洲激情另类| 亚洲三级影院| 亚洲经典自拍| 欧美激情综合色| 亚洲第一精品电影| 亚洲国产一区二区a毛片| 欧美激情bt| 亚洲动漫精品| 亚洲区中文字幕| 亚洲精品日韩激情在线电影| 亚洲黄网站在线观看| 亚洲欧洲一二三| 在线视频欧美日韩| 亚洲一区日韩| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美美女| 久久精品人人做人人爽| 久久嫩草精品久久久久| 免费亚洲电影在线观看| 欧美不卡在线视频| 欧美日韩国产丝袜另类| 欧美日韩免费| 欧美日韩国产三级| 国产欧美一区二区三区在线看蜜臀| 国产午夜精品在线观看| 极品尤物av久久免费看| 亚洲黄网站黄| 亚洲午夜国产一区99re久久| 亚洲国产精品一区二区尤物区| 韩国成人福利片在线播放| 在线观看国产一区二区| 亚洲靠逼com| 亚洲自拍高清| 麻豆视频一区二区| 亚洲美女视频网| 欧美在线视频免费| 欧美电影免费网站| 国产精品亚洲欧美| 一区二区久久久久| 欧美国产日韩视频|