linux可執行檔案的載入和執行之一 1

2021-04-29 06:12:50 字數 1437 閱讀 4024

可執行檔案的載入和執行 execve系統呼叫可以呼叫乙個可執行檔案完全代替當前的程序,它在libc中的封裝有幾個api:int execl(const charp a t* h n a m e, const char a* rg 0, ... /* (char *) 0 */);

int execv(const charp a t* h n a m e, char *consta rgv );

int execle(const charp a t* h n a m e, const char a* rg 0, ...

/* (char *)0, char *cones nt v p */);

int execve(const charp a t* h n a m e, char *consta rgv , char *consten vp );

int execlp(const charf i l e* n a m e, const char a* rg 0, ... /* (char *) 0 */);

int execvp(const charf i l e* n a m e, char *consta rgv );我們深入核心**來研究一下可執行檔案的載入過程.execve()系統呼叫的入口是sys_execve().**如下:asmlinkage int sys_execve(struct pt_regs regs)

//釋放記憶體

putname(filename);

out:

return error;

}系統呼叫的時候,把引數依次放在:ebx,ecx,edx,esi,edi,ebp暫存器.詳情請參閱本站<< linux中斷處理之系統呼叫》.第乙個引數為可執行檔案路徑,第二個引數為引數的個數,第三個引數為可執行檔案對應的引數.do_execve()是這個系統呼叫的核心,它的**如下:int do_execve(char * filename,

char __user *__user *argv,

char __user *__user *envp,

struct pt_regs * regs)

out:

free_arg_pages(bprm);

if (bprm->security)

security_bprm_free(bprm);

out_mm:

if (bprm->mm)

mmput (bprm->mm);

out_file:

if (bprm->file)

out_kfree:

kfree(bprm);

out_ret:

return retval;

}

研究**之前,我們先考慮一下程序的空間安排結構.在本站的<

linux核心載入可執行檔案

使用gdb跟蹤分析乙個execve系統呼叫核心處理函式 sys execve 驗證您對linux系統 載入可執行程式所需處理過程的理解 登陸實驗樓虛擬機器 增加 s s啟動引數開啟除錯模式 qemu kernel linux 3.18.6 arch x86 boot bzimage initrd r...

linux 執行可執行檔案

1 首先,需要了解一下a.out這個目標檔案。a.out在linux下是elf executable linkable format 檔案格式,該目標檔案由乙個檔案頭 段 資料段 已初始化 從定位資訊區 符號表及符號名字字串構成,如下左圖所示,經過鏈結後生成執行檔案如下右圖所示,需要說明的是1 bs...

Linux的可執行檔案

linux的可執行檔案 用ls f命令,後買帶 的就是可執行檔案。linux下,當你使用.執行乙個程式時,首先是shell來接管你的輸入,然後用fork派生子程序,最後用execv系列將你的那個程式的 交給核心 1。檢查你執行的檔案的屬性,其屬性在它的i節點中描述,如果你的那個檔案不是可執行的屬性,...