① linux編程問題,execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0);
execl,l代表list,參數表的意思,
(char *) 0,代表空指針,說明參數表結束。
這個函數的原型是可變參數,空指針給庫解析參數的時候防止程序錯誤。execl是個庫函數,真正的系統調用是execve。
② linux內核源碼:文件系統——可執行文件的載入和執行
在Linux系統中,可執行文件的載入和執行涉及一系列復雜而精密的底層操作,主要包括以下步驟:
文件載入到內存:
進程結構初始化:
API重定位和內存分配:
參數和環境變數處理:
文件頭部解析:
執行新程序:
內存管理和許可權檢查:
安全性考慮:
重點內容: _strings函數負責在用戶空間和內核空間之間復制參數和環境變數。 do_execve函數是執行新程序的核心,涉及文件讀取、許可權檢查、文件頭驗證和執行路徑設置。 深入了解這些核心函數和過程,有助於更深入地理解Linux內核的工作原理和安全性考慮。