通過開始執行shell進程,理解缺頁異常

來源:互聯網
上載者:User

標籤:

    通過進程2載入shell進程,詳解execve,這篇文章,最後shell程式開始執行的線性地址是128MB,由於free_page_tables,已經釋放了第32位頁目錄項。所以會產生缺頁異常。程式會執行,如下代碼:

    do_no_page

void do_no_page(unsigned long error_code,unsigned long address)//address為128MB{int nr[4];unsigned long tmp;unsigned long page;int block,i;address &= 0xfffff000;tmp = address - current->start_code;//tmp為0if (!current->executable || tmp >= current->end_data) {get_empty_page(address);return;}if (share_page(tmp))return;if (!(page = get_free_page()))//擷取一頁記憶體oom();/* remember that 1 block is used for header */block = 1 + tmp/BLOCK_SIZE;// /bin/sh的第1個節點是檔案頭,開始執行的代碼在第二個節點for (i=0 ; i<4 ; block++,i++)nr[i] = bmap(current->executable,block);//得到執行的代碼所在的塊號bread_page(page,current->executable->i_dev,nr);//把可執行檔代碼放到了page所指向的頁面中.....if (put_page(page,address))return;free_page(page);oom();
    put_page我們已經講過了,在第32位頁目錄項指向一個頁表,在該頁表的第一項,指向了可執行代碼所在的頁面。由於是異常,程式返回後還會執行線性地址(cs:eip)為128MB(剛剛產生缺頁異常的地址)的程式,經過分頁機制,就映射到最終的物理地址開始執行自己的程式了。

通過開始執行shell進程,理解缺頁異常

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.