1. 程式人生 > >系統調用的三層機制(上)

系統調用的三層機制(上)

系統 函數 return 內核 系統調用 實驗 ble .com inux

2018-2019-120189224 《庖丁解牛Iinux內核分析》第四周學習總結

系統調用

技術分享圖片

含參數的系統調用實驗

1.使用庫函數API觸發rename系統調用

#include<stdio.c>
int main()
{
int ret;
char *oldname="hello.c";
char *newname="newhello.c";
ret = rename(oldname,newname);
if(ret == 0)
printf("Renamed successfully\n");
else
printf("Unable to rename the file");
return 0;
}

2.寫嵌入式匯編代碼觸發rename系統調用,把系統調用號38(0x26)存入EAX寄存器,oldname存入EBX,newname存入ECX,執行int來使系統陷入內核態
技術分享圖片
3.查看文件列表
技術分享圖片
4.編譯執行後hello.c成功改成newhello.c
技術分享圖片
5.rename_asm.c文件中的“a”換為“m”
技術分享圖片

技術分享圖片

代碼調試中的問題和解決過程

  • 問題:rename_asm.c編譯報錯
  • 解決方案:采用32位的編譯方式

系統調用的三層機制(上)