Linux實驗四報告

2022-08-31 11:27:11 字數 2131 閱讀 1171

系統呼叫:作業系統為使用者態程序與硬體裝置進行互動提供了一組介面

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 學年 第 一 學...