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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34

發(fā)布時(shí)間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

任務(wù)和特權(quán)級保護(hù)(三)——《x86匯編語言:從實(shí)模式到保護(hù)模式》讀書筆記34

5.2.7 在GDT中創(chuàng)建LDT描述符

處理器要求在GDT中安裝每個(gè)LDT的描述符。當(dāng)要使用這些LDT時(shí),可以用它們的選擇子來訪問GDT,找到LDT描述符并把它加載到LDTR寄存器。

675 ;在GDT中登記LDT描述符 676 mov eax,[es:esi+0x0c] ;LDT的起始線性地址 677 movzx ebx,word [es:esi+0x0a] ;LDT段界限 678 mov ecx,0x00408200 ;LDT描述符,特權(quán)級0 679 call sys_routine_seg_sel:make_seg_descriptor 680 call sys_routine_seg_sel:set_up_gdt_descriptor 681 mov [es:esi+0x10],cx ;登記LDT選擇子到TCB

LDT描述符的格式如下圖:

LDT本身也是一種特殊的段,最大尺寸為64KB;
G:粒度位,用來表示LDT的界限值是以字節(jié)為單位還是以4KB為單位;
D:固定為0;
L:固定為0;
AVL和P:含義與存儲器的段描述符相同;
S:固定為0;表示系統(tǒng)的段描述符或者門描述符,以區(qū)別于存儲器的段描述符(S=1);
TYPE:固定為0010b,表示這是一個(gè)LDT描述符;

第678行:我認(rèn)為是作者的筆誤,應(yīng)該是

678 mov ecx,0x00008200

第681行:將返回的選擇子(RPL=0)登記到TCB中;

5.2.8 為用戶程序創(chuàng)建TSS

關(guān)于TSS的知識,可以參考我的博文TSS詳解 ——《x86匯編語言:從實(shí)模式到保護(hù)模式》讀書筆記33

684 mov ecx,104 ;tss的基本尺寸 685 mov [es:esi+0x12],cx 686 dec word [es:esi+0x12] ;登記TSS界限值到TCB 687 call sys_routine_seg_sel:allocate_memory 688 mov [es:esi+0x14],ecx ;登記TSS基地址到TCB

以上代碼做的工作有:
1. 申請TSS所需的空間(104字節(jié));
2. 登記TSS的界限值(104-1=103)和基地址到TCB;

接下來,填寫TSS表格的內(nèi)容。
1. Previous Task Link = 0;
2. 填寫ESPx和SSx(x=0,1,2)(從TCB中拷貝);
3. 填寫LDT選擇子(從TCB中拷貝);
4. 填寫I/O位圖偏移(從TCB中拷貝,等于TSS的界限值103);
5. T=0;

5.2.9 在GDT中創(chuàng)建TSS描述符

和LDT一樣,處理器要求必須在GDT中安裝TSS的描述符。

719 ;在GDT中登記TSS描述符 720 mov eax,[es:esi+0x14] ;TSS的起始線性地址 721 movzx ebx,word [es:esi+0x12] ;段長度(界限) 722 mov ecx,0x00408900 ;TSS描述符,特權(quán)級0 723 call sys_routine_seg_sel:make_seg_descriptor 724 call sys_routine_seg_sel:set_up_gdt_descriptor 725 mov [es:esi+0x18],cx ;登記TSS選擇子到TCB

第722行:我覺得是作者的筆誤,應(yīng)該是0x00008900. G=0,P=1,DPL=0,B=0;
第725行:登記TSS的選擇子(RPL=0)到TCB;

以上5.2節(jié)的內(nèi)容,算是把過程load_relocate_program說完了,接下來說如何轉(zhuǎn)到戶程序執(zhí)行。

6. 如何轉(zhuǎn)到用戶程序執(zhí)行

任務(wù)寄存器TR總是指向當(dāng)前任務(wù)的TSS,而LDTR寄存器也總是指向當(dāng)前任務(wù)的LDT。TSS是任務(wù)的主要標(biāo)志,因此要使TR寄存器指向當(dāng)前任務(wù);而使用LDTR的原因是可以在任務(wù)執(zhí)行期間加速對段的訪問。

在多任務(wù)環(huán)境中,從舊任務(wù)切換的新任務(wù)的時(shí)候,TR和LDTR寄存器的值都會更新,以指向新任務(wù)。但是,目前我們只有一個(gè)任務(wù),而且是特權(quán)級為3的任務(wù),我們遇到的問題可以表述為:如何從任務(wù)的全局空間(處于特權(quán)級0)轉(zhuǎn)移到它自己的局部空間(處于特權(quán)級3)?

答案是分為兩步:
1. 確立身份,使TR和LDTR寄存器指向這個(gè)任務(wù);
2. 假裝從調(diào)用門返回;

6.1. TR和LDTR寄存器

TR和LDTR寄存器都包括16位的選擇器部分和描述符高速緩存器部分(如下圖所示)。選擇器部分的內(nèi)容是TSS和LDT描述符的選擇子。

6.2. ltr和lldt指令

加載任務(wù)寄存器TR的指令是ltr,其格式為

ltr r/m16
  • 這條指令的操作數(shù)是通用寄存器或者16位的內(nèi)存單元,里面的內(nèi)容是16位的TSS選擇子。
  • 執(zhí)行這條指令后,處理器用選擇子訪問GDT,找到TSS描述符,將基地址、段界限、段屬性加載到描述符高速緩存器中,同時(shí)將該描述符中的B位置1,但并不執(zhí)行任務(wù)切換。
  • 該指令屬于特權(quán)指令,只能在0特權(quán)級下執(zhí)行。
  • 該指令不影響EFLAGS的任何標(biāo)志位。
  • 加載局部描述符表寄存器LDTR的指令是lldt,其格式為

    lldt r/m16

    原理與上述類似,只不過操作數(shù)是16位的LDT選擇子。

    848 mov eax,mem_0_4_gb_seg_sel 849 mov ds,eax 850 851 ltr [ecx+0x18] ;加載任務(wù)狀態(tài)段 852 lldt [ecx+0x10] ;加載LDT

    注意,851~852中的ECX的值是TCB的基地址。以上的代碼執(zhí)行完,用戶任務(wù)的身份算是確立了。

    6.3. 假裝從調(diào)用門返回

    854 mov eax,[ecx+0x44] 855 mov ds,eax ;切換到用戶程序頭部段

    以上兩行,向DS中加載用戶程序頭部段的選擇子(RPL=3,TI=1)。

    857 ;以下假裝是從調(diào)用門返回。摹仿處理器壓入返回參數(shù) 858 push dword [0x08] ;調(diào)用前的堆棧段選擇子 859 push dword 0 ;調(diào)用前的esp 860 861 push dword [0x14] ;調(diào)用前的代碼段選擇子 862 push dword [0x10] ;調(diào)用前的eip 863 864 retf

    這段代碼要結(jié)合用戶程序頭部的格式和調(diào)用門的返回過程來分析。

    用戶程序頭部的格式如下圖(為了方便閱讀,我總是樂此不疲地貼圖)。
    注意,被內(nèi)核重定位后的選擇子,其RPL的值都等于3.

    關(guān)于調(diào)用門的返回過程,強(qiáng)烈建議復(fù)習(xí)一下我的博文調(diào)用門詳解

    這篇博文中講解的從調(diào)用門的返回過程是:

  • 檢測被調(diào)用者棧中CS寄存器的RPL字段值,以確定在返回時(shí)特權(quán)級是否發(fā)生改變。
  • 彈出并使用被調(diào)用過程棧上的值加載EIP和CS寄存器。在此過程中會對代碼段描述符和代碼段選擇子的RPL進(jìn)行特權(quán)級與類型檢查。
  • 如果遠(yuǎn)返回指令是帶參數(shù)的,則將參數(shù)和ESP寄存器的當(dāng)前值相加,以跳過被調(diào)用者棧中的參數(shù)部分,最后的結(jié)果是ESP寄存器指向調(diào)用者SS和ESP的壓棧值。注意,retf指令的參數(shù)必須等于調(diào)用門中所有參數(shù)的總字節(jié)數(shù)之和。
  • 如果返回時(shí)需要改變特權(quán)級,則從棧中將ESP和SS彈出,并把值代入寄存器ESP和SS,切換到調(diào)用者的棧。
  • 如果遠(yuǎn)返回指令是帶參數(shù)的,則將參數(shù)和ESP寄存器的當(dāng)前值相加,以跳過調(diào)用者棧中的參數(shù)部分,最后的結(jié)果是調(diào)用者的棧恢復(fù)平衡。
  • 如果返回時(shí)需要改變特權(quán)級,則檢查DS,ES,FS和GS的內(nèi)容,如果段選擇子指向數(shù)據(jù)段或者非一致代碼段且段描述符的DPL在數(shù)值上小于返回后的新CPL,那么就把數(shù)值0傳送到該段寄存器。
  • 858~862執(zhí)行完后,棧的布局如下(這其實(shí)是內(nèi)核的棧,并不是用戶的0特權(quán)級棧):

    我們對著上面的返回步驟,一步一步來看。
    1. 因?yàn)橛脩舫绦虻腃S寄存器中的RPL=3,所以在返回的時(shí)候特權(quán)級要發(fā)生改變。
    2. 彈出用戶程序的EIP和CS(綠色部分)加載EIP和CS寄存器。
    3. 第864行的retf指令不帶參數(shù),所以這步跳過。
    4. 從棧中將用戶程序的ESP和SS(藍(lán)色部分)彈出,并把值代入寄存器ESP和SS,切換到調(diào)用者的棧(實(shí)際是用戶程序的3特權(quán)級棧)。
    5. 第864行的retf指令不帶參數(shù),所以這步跳過。
    6. 因?yàn)镈S中的內(nèi)容是用戶程序頭部段的選擇子,其DPL=3,所以不會把數(shù)值0傳到DS;至于ES、FS和GS,它們一般會指向內(nèi)核數(shù)據(jù)段,其DPL=0,所以這些寄存器很可能被數(shù)值0加載,所以用戶程序中應(yīng)該對它們先初始化再引用。

    囿于篇幅,就寫到這里吧。下次我們正式進(jìn)入用戶程序的執(zhí)行…

    總結(jié)

    以上是生活随笔為你收集整理的任务和特权级保护(三)——《x86汇编语言:从实模式到保护模式》读书笔记34的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩免费看 | 久伊人 | 免看一级a毛片一片成人不卡 | 综合 欧美 亚洲日本 | 久久这里只有精品首页 | 欧美在线国产 | 伊人狠狠操 | 色多多视频在线 | 成人亚洲免费 | 国产精品美女在线观看 | 色婷婷精品久久二区二区密 | 一级作爱片 | 91成人福利 | aaa一区二区 | 欧美aaaaa| 国产午夜精品一区 | 精品视频一区二区三区在线观看 | 亚洲国产片 | 亚洲欧洲日本国产 | 精品国产免费视频 | 少妇诱惑av | 国产精品情侣自拍 | 欧美一区二区三区久久久 | 青青艹av | 国产精品无码人妻一区二区在线 | 福利视频在线 | 草草影院第一页 | a一级免费视频 | 免费在线观看av片 | 伊人春色网站 | 欧美精品一区二区三区四区五区 | 国产美女永久无遮挡 | 久久一区二区三区视频 | 欧美日韩图片 | 成人99 | 免费看黄色a级片 | 成人区一区二区 | 免费成人深夜夜 | 三级免费黄 | 鲁一鲁啪一啪 | 综合久久久久久久 | 日韩一区二区三区三四区视频在线观看 | 久久久久蜜桃 | 很黄很污的视频网站 | 成人高清免费 | 久久午夜精品人妻一区二区三区 | 中文乱码人妻一区二区三区视频 | 自拍偷拍福利视频 | 黄色网页在线看 | 欧美一级二级三级视频 | 国产色视频在线 | 视频一区二区三 | 麻豆短视频 | 午夜黄色一级片 | 麻豆av网 | 欧美亚洲日本国产 | 草莓视频18免费观看 | 欧美精品在线一区 | 爱情岛亚洲品质自拍极速福利网站 | 色在线免费视频 | av一区二区不卡 | 伊人网av| 国产又粗又长又爽 | 欧美涩涩涩 | 中文国产字幕 | 一区二区亚洲精品 | 草草在线视频 | 俺来也俺也啪www色 欧洲一区二区视频 | 国产成人综合视频 | 海量av| 精品伦理一区二区 | 巨大黑人极品videos精品 | 五十路在线视频 | 国内成人自拍视频 | 进去里在线观看 | 午夜院线| 蜜桃色999| 另类小说色综合 | 梦梦电影免费高清在线观看 | 国产三级精品三级在线 | 日本免费网址 | 美女四肢被绑在床扒衣 | 蜜桃在线一区 | 日韩成人动漫在线观看 | 亚洲三区精品 | 一边顶弄一边接吻 | 天天干狠狠爱 | 亚洲一区二区自拍 | 亚洲欧美日韩国产一区二区三区 | 久久亚洲在线 | 亚洲自拍偷拍一区二区三区 | 天天干天天干 | 可以免费看的毛片 | av在线导航| 欧美日韩高清免费 | 日韩黄色在线 | 免费性爱视频 | 国产精品又黄又爽又色无遮挡 | 手机免费看av |