execve(執(zhí)行文件)談灶顫

成都創(chuàng)新互聯(lián)公司基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務器托管報價,主機托管價格性價比高,為金融證券行業(yè)成都服務器托管,ai人工智能服務器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
在父進程中fork一個子進程,在子進程中調辯埋用exec函數(shù)啟動新的程序。exec函數(shù)一共有六個,其中execve為內核級系統(tǒng)調用,其他(execl,execle,execlp,execv,execvp)都是調用execve的庫函數(shù)。
表頭文件
#includeunistd.h
定義函數(shù)
int execve(const char * filename,char * const argv[ ],char * const envp[ ]);
函數(shù)說明
execve()用來執(zhí)行參數(shù)filename字符串所代表的文件路徑,第二個參數(shù)是利用數(shù)組指針來傳遞給執(zhí)行文件,并且需要以空指針(NULL)結束,最后一個參數(shù)則為傳遞給執(zhí)行文件的新環(huán)境變量數(shù)組。
返回值
如果執(zhí)行成功則函數(shù)不會返回,執(zhí)行失敗則直接返回-1,失敗原因存于errno 中。
錯誤代碼 EACCES
1. 欲執(zhí)行的文件不具有用戶可執(zhí)行的權限。
2. 欲含敗執(zhí)行的文件所屬的文件系統(tǒng)是以noexec 方式掛上。
3.欲執(zhí)行的文件或script翻譯器非一般文件。
EPERM
1.進程處于被追蹤模式,執(zhí)行者并不具有root權限,欲執(zhí)行的文件具有SUID 或SGID 位。
2.欲執(zhí)行的文件所屬的文件系統(tǒng)是以nosuid方式掛上,欲執(zhí)行的文件具有SUID 或SGID 位元,但執(zhí)行者并不具有root權限。
E2BIG 參數(shù)數(shù)組過大
ENOEXEC 無法判斷欲執(zhí)行文件的執(zhí)行文件格式,有可能是格式錯誤或無法在此平臺執(zhí)行。
EFAULT 參數(shù)filename所指的字符串地址超出可存取空間范圍。
ENAMETOOLONG 參數(shù)filename所指的字符串太長。
ENOENT 參數(shù)filename字符串所指定的文件不存在。
ENOMEM 核心內存不足
ENOTDIR 參數(shù)filename字符串所包含的目錄路徑并非有效目錄
EACCES 參數(shù)filename字符串所包含的目錄路徑無法存取,權限不足
ELOOP 過多的符號連接
ETXTBUSY 欲執(zhí)行的文件已被其他進程打開而且正把數(shù)據(jù)寫入該文件中
EIO I/O 存取錯誤
ENFILE 已達到系統(tǒng)所允許的打開文件總數(shù)。
EMFILE 已達到系統(tǒng)所允許單一進程所能打開的文件總數(shù)。
EINVAL 欲執(zhí)行文件的ELF執(zhí)行格式不只一個PT_INTERP節(jié)區(qū)
EISDIR ELF翻譯器為一目錄
ELIBBAD ELF翻譯器有問題。
范例
#includeunistd.h
main()
{
char * argv[ ]={“l(fā)s”,”-al”,”/etc/passwd”,(char *)0};
char * envp[ ]={“PATH=/bin”,0}
execve(“/bin/ls”,argv,envp);
}
執(zhí)行
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
分享題目:c語言interp函數(shù) c語言中interger
標題來源:http://chinadenli.net/article47/dsphihj.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、營銷型網站建設、響應式網站、用戶體驗、微信小程序、做網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)