第五週

潘恆 + 原創做品轉載請註明出處 + 《Linux內核分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 

1、使用gdb跟蹤分析一個系統調用內核函數

1.增長系統調用

  1).先執行rm menu -rf,強制刪除原有的menu文件夾,使用git命令更新menu代碼至最新版
    enter description heregit

  2).test.c中main函數裏,增長MenuConfig()
    enter description here函數

  3).增長對應的兩個函數,Getpid和GetpidAsm
    enter description here
    enter description here3d

  4).make rootfs

    輸入help,能夠看到當前的系統調用:調試

    enter description here

  5).rest

    enter description here成功。blog

2.使用 gdb調試

           enter description here
 
            enter description here
   c運行以後,在MenuOs裏使用time,能夠看到它停了下來
           enter description here
   list能夠查看內部的函數,直到sys_time返回後進入彙編代碼處理,gdb沒法繼續進行追蹤
          enter description hereip

2、分析從system_call開始到iret結束之間的整個過程

  1. SAVE_ALL:保存現場
  2. syscall_call:調用了系統調用處理函數
  3. restore all:恢復現場(由於系統調用處理函數也算是一種特殊的「中斷」)
  4. syscallexitwork:同上一條i
  5. INTERRUPT RETURN:也就是iret,系統調用到此結束

3、對系統調用處理過程的理解get

  1.用戶態到內核態須要int 0x80進行中斷,只有生成了中斷向量後才能夠切換狀態;it

  2.中斷處理讓CPU中止當前工做轉爲執行系統內核中預設的一些任務,所以必需要對當前CPU執行的任務進行執行現場的保護工做,並對一些其餘雜七雜八的工做進行檢查,完成調用後,再進行檢查,才能執行iret返回。io

相關文章
相關標籤/搜索