系統呼叫:作業系統為使用者態程序與硬體裝置進行互動提供了一組介面
api:應用程式設計介面,是乙個函式定義。
作業系統提供api和系統呼叫的關係。
一般每個系統呼叫對應乙個封裝例程。
庫再用這些封裝例程定義給使用者的api。
返回值:
1、大部分封裝例程返回乙個整數,值含義依賴於相應的系統呼叫;
2、-1,多數情況——核心不滿足程序請求。
3、libc定義errno變數包含特定出錯碼。
使用者態程序——(呼叫)——>系統呼叫
cpu——(切換)———內態核執行乙個核心函式
linux中,通過執行
int
$0x80執行系統呼叫的,此彙編指令產生向量為128的程式設計異常。
中斷向量0x80與system_call繫結起來,
系統呼叫號將xyz和sys_xyz關聯起來。
系統呼叫三層皮:
api xyz
中斷向量system_call
中斷服務程式sys_xyz
其中,system_call是linux所有系統呼叫的入口點。
傳參:
1、核心實現不同系統呼叫。
2、程序必須指明哪個系統呼叫,這需要傳遞乙個名為系統呼叫號的引數。使用eax暫存器傳遞 3.ebx,ecx,edx,esi,edi按照順序存放前五個引數。
4、需要六個或六個以上引數時,應用乙個單獨的暫存器存放指向所有引數在使用者空間位址的指標。
5、返回值用eax。
暫存器傳遞引數限制
1、引數長度小於或等於暫存器長度(32位);
2、除系統呼叫號(eax),引數個數不超6個( ebx,ecx,edx,esi,edi,ebp)
關於實驗,首先分析庫函式呼叫系統呼叫的工作過程
getpid()函式功能:
取得程序識別碼,返回值是程序的id 這裡直接使用getpid庫函式進行系統呼叫。
傳入的引數為null,通過eax傳入,再通過eax將返回值傳回。
其次,分析彙編**呼叫系統呼叫的工作過程
系統呼叫傳遞第乙個引數ebx,這裡是null
8行,將ebx清零; 9行,將20放入eax 11行,返回值用eax儲存
總之,int 80觸發中斷,找到中斷向量表,從表中尋找中斷向量(或中斷門),通過中斷向量,找到系統呼叫表,
找到system_call jmp eax*4+system_table
最後,對兩者的編譯結果進行分析:兩種方式的編譯執行結果分別是2999和3065。
系統呼叫工作機制,就是應用程式應該以某種方式(庫函式或彙編**)通知系統,告訴核心自己需要執行乙個系統呼叫,希望系統切換到核心態。
核心就可以代表應用程式在核心空間執行系統呼叫。
此外,通知核心的機制是靠軟中斷實現的:
通過引發異常將系統切換核心態執行異常處理程式(系統呼叫處理程式)。
實驗報告 四
學 號 20141450041 中國人民公安大學 chinese people public security university 網路對抗技術 實驗報告 實驗四惡意 技術 學生姓名 張珂 年級 2014級 區隊五區隊 指導教師 高見 資訊科技與網路安全學院 2016年11月7日 實驗任務總綱 2...
實驗報告四
一.實驗目的 1 掌握類的繼承 2 變數的繼承和覆蓋,方法的繼承,過載和覆蓋的實現 二.實驗的內容 1 根據下面的要求實現圓類circle。1.圓類circle的成員變數 radius表示圓的半徑。2.圓類circle的方法成員 circle 構造方法,將半徑置0 circle double r 構...
實驗報告四
中國人民公安大學 chinese people public security university 網路對抗技術 實驗報告 實驗四惡意 技術 學生姓名 湯堯 年級 2018級 區隊 6 指導教師 高見 資訊科技與網路安全學院 2016年11月7日 實驗任務總綱 2016 2017 學年 第 一 學...