標籤(空格分隔): 20135328陳都linux
陳都 原創做品轉載請註明出處 《Linux內核分析》MOOC課程 http://mooc.study.163.com/course/USTC-1000029000shell
gcc -E -o XX.cpp XX.c (-m32)//.cpp是預處理文件
gcc -x cpp-output -S -o hello.s hello.cpp (-m32)//.s是彙編代碼
gcc -x assembler -c hello.s -o hello.o (-m32)
gcc -o hello.static hello.c (-m32) -static
左半邊是ELF格式,右半邊是執行時的格式
其中,ELF頭描述了該文件的組織狀況,程序投標告訴系統如何建立一個進程的內存映像,section頭表包含了描述文件sections的信息。
當系統要執行一個文件的時候,理論上講,他會把程序段拷貝到虛擬內存中某個段編輯器
通常咱們執行一個程序的Shell環境,咱們的實驗直接使用execve系統調用。
Shell自己不限制命令行參數的個數,命令行參數的個數受限於命令自身
例如,int main(int argc, char *argv[])
又如, int main(int argc, char argv[], char
envp[])//envp是shell的執行環境
Shell會調用execve將命令行參數和環境參數傳遞給可執行程序的main函數函數
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
動態連接分爲可執行程序裝載時動態連接和運行時動態連接(通常使用前者)學習