日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux执行class文件_深入理解linux内核——可执行文件执行过程(2)

發布時間:2023/12/19 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux执行class文件_深入理解linux内核——可执行文件执行过程(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上篇。。

13。調用do_mmap()函數創建一個新線性區來對可執行文件正文段(即代碼)進行映射。這個線性區的起始線性地址依賴于可執行文件的格式,因為程序的可執行代碼通常是不可重定位的。因此,這個函數假定從某一特定邏輯地址的偏移量開始(因此就從某一特定的線性地址開始)裝入正文段。ELF程序被裝入的起始線性地址為0x08048000.

14。調用do_mmap()函數創建一個新線性區來對可執行文件的數據段進行映射。這個線性區的起始線性地址也依賴于可執行文件的格式,因為可執行代碼希望在特定的偏移量(即特定的線性地址)處找到它自己的變量。在ELF程序中,數據段正好被裝在正文段之后

15。為可執行文件的其他專用段分配另外的線性區,通常是無。

16。調用一個裝入動態鏈接程序的函數。如果動態鏈接程序是ELF可執行的,這個函數叫做load_elf_interp()。一般情況下,這個函數執行第12?14的操作,不過要用動態鏈接程序代替被執行的文件。動態鏈接程序的正文段和數據段在線性區的起始線性地址是由動態鏈接程序本身指定的:但它們處于高地址區(通常高于0x40000000),這是為了避免與被執行文件的正文段和數據段所映射的線性區發生沖突。

17。把可執行格式的linux_binfmt對象的地址存在進程描述符的binfmt字段中。

18。確認進程的新權限

19。創建特定的動態鏈接程序表并把它們存在在用戶態堆棧,這些表處于命令行參數據和指向環境串的指針數組之間。

20。設置進程的內存描述符的start_code、end_code、start_data、end_data、start_brk、brk及start_stack字段。

21。調用do_brk()函數創建一個新的匿名線性區來映射程序的bss段(當進程寫入一個變量時,就觸發請求調頁,進而分配一個頁框)。這個線性區的大小是在可執行程序被鏈接時就計算出來的。因為程序的可執行代碼通常是不可重新定位的,因此,必須指定這個線性區的起始地址。在ELF程序中,bss段正好裝在數據段之后

22。調用start_thread()宏修改保存在內核態堆棧但屬于用戶態寄存器的eip和esp的值,以使它們分別指向動態鏈接程序的入口點新的用戶態堆棧的棧頂

23。如果進程正被跟蹤,就通知調試程序execve()系統調用已完成。

24。返回0值(成功)。

總結

以上是生活随笔為你收集整理的linux执行class文件_深入理解linux内核——可执行文件执行过程(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。