Firefox google Windows shell 编程 Android Python Ubuntu 开源 java mysql centos linux 云计算 apache 微软 php 程序员 nginx wordpress

Linux窥视程序执行中的秘密

 上面的程序執行過程比較難理解,這裏推薦使用strace工具分析這個程序的執行流程,在執行a.out的那個目錄。輸入新的執行命令。

 按回車鍵後會打印出程序使用系統調用的結果,由於輸出信息比較多,下面分析更多關鍵的步驟:

 (1)使用exec系列系統調用執行可執行文件。這裏使用execve函數,這是一個系統函數調用,實際上,絕大多數Linux程序都是使用這個系統調用執行的。

 (2)使用brk函數設置創建進程的數據段,brk函數系統調用很重要,該系統調用創建存放程序內容的內存區域。

 (3)打開共享文件庫,並且加載到內存。

 (4)調用write函數系統調用,輸出字符串到屏幕,write是共享庫的一個函數,也是一個系統調用。printf函數最終調用的就是write函數系統調用。

 到這裏,已經看到了程序執行的全過程,理解程序的執行流程,是以後學習和理解多進程和多線程程序開發的基礎。

  linux 下有動態庫和靜態庫,動態庫以.so為擴展名,靜態庫以.a為擴展名。二者都使用廣泛。

延伸阅读

评论