linux系統(tǒng)調(diào)用與ptrace分析(實(shí)驗(yàn)報(bào)告).doc
約12頁(yè)DOC格式手機(jī)打開(kāi)展開(kāi)
linux系統(tǒng)調(diào)用與ptrace分析(實(shí)驗(yàn)報(bào)告),linux系統(tǒng)調(diào)用與ptrace分析(實(shí)驗(yàn)報(bào)告)頁(yè)數(shù):12字?jǐn)?shù):7036linux系統(tǒng)調(diào)用與ptrace分析概述1.linux的系統(tǒng)結(jié)構(gòu)在linux系統(tǒng)結(jié)構(gòu)中,最核心的是計(jì)算機(jī)硬件,它提供對(duì)linux軟件的支持,靠近硬件的內(nèi)層是linux內(nèi)核程序(即操作系統(tǒng))。內(nèi)核直接和硬件打交道是程序和硬件之間的接口或界面。它對(duì)一切...
內(nèi)容介紹
此文檔由會(huì)員 cnlula 發(fā)布
Linux系統(tǒng)調(diào)用與ptrace分析(實(shí)驗(yàn)報(bào)告)
頁(yè)數(shù):12 字?jǐn)?shù):7036
Linux系統(tǒng)調(diào)用與ptrace分析
概述
1.Linux的系統(tǒng)結(jié)構(gòu)
在Linux系統(tǒng)結(jié)構(gòu)中,最核心的是計(jì)算機(jī)硬件,它提供對(duì)Linux軟件的支持,靠近硬件的內(nèi)層是Linux內(nèi)核程序(即操作系統(tǒng))。內(nèi)核直接和硬件打交道是程序和硬件之間的接口或界面。它對(duì)一切外層程序提供公共服務(wù),把外部程序同硬件隔離開(kāi)。內(nèi)核程序大致可分為文件系統(tǒng)管理,進(jìn)程管理,內(nèi)存管理等幾部分。進(jìn)程管理又分為低級(jí)進(jìn)程管理和高級(jí)進(jìn)程管理。低級(jí)進(jìn)程管理主要包括:進(jìn)程調(diào)度分配,控制占用處理器的程序和基本的進(jìn)程通信。高級(jí)進(jìn)程管理主要包括:進(jìn)程的創(chuàng)建,終止,進(jìn)程間通信,進(jìn)程在內(nèi)存和外存之間的轉(zhuǎn)儲(chǔ),信號(hào)機(jī)構(gòu)和進(jìn)程間跟蹤控制等。內(nèi)核程序的外層是實(shí)用程序,內(nèi)核提供對(duì)實(shí)用程序的支持,兩層之間的界面是系統(tǒng)調(diào)用。內(nèi)核外的實(shí)用程序通過(guò)系統(tǒng)調(diào)用來(lái)和內(nèi)核打交道。實(shí)現(xiàn)的過(guò)程是通過(guò)一種特殊的指令(陷入指令)進(jìn)入內(nèi)核,然后轉(zhuǎn)入相應(yīng)的系統(tǒng)調(diào)用處理程序。這也是本文將主要討論的問(wèn)題。
2.80386體系結(jié)構(gòu)
80386的體系結(jié)構(gòu)承認(rèn)兩類事件。
異常(exceptions)
中斷(interrupts)
他們兩都會(huì)引起“上下文轉(zhuǎn)換”同時(shí)建立一個(gè)過(guò)程或任務(wù),中斷可以隨時(shí)隨地發(fā)生(包括在執(zhí)行程序時(shí))所以用來(lái)響應(yīng)硬件信號(hào)。而異常則由指令內(nèi)部錯(cuò)誤引起。
每一個(gè)異?;蛑袛喽加幸粋€(gè)唯一的標(biāo)識(shí)符,在linux中被稱為向量。
指令內(nèi)部異常和NMI(不可屏蔽中斷)的中斷向量的范圍從0—31。32-255的任何向量都可以用做
可屏蔽中斷
編程(調(diào)試)異常
至于可屏蔽中斷則取決于該系統(tǒng)的硬件配置。外部中斷控制器在中斷響應(yīng)周期把中斷向量放到總線上。
3. Linux系統(tǒng)調(diào)用流程概述
Linux系統(tǒng)調(diào)用的流程非常簡(jiǎn)單,它由0x80號(hào)中斷進(jìn)入系統(tǒng)調(diào)用入口,通過(guò)使用系統(tǒng)調(diào)用表保存系統(tǒng)調(diào)用服務(wù)函數(shù)的入口地址來(lái)實(shí)現(xiàn),本文首先分析一般Linux系統(tǒng)調(diào)用的流程,然后再分析Linux系統(tǒng)調(diào)用sys_ptrace().
Linux系統(tǒng)調(diào)用的流程分析
設(shè)定0x80號(hào)中斷
系統(tǒng)啟動(dòng)后,先進(jìn)行初始化,其中一部分重要的工作在start_kernel()函數(shù)(main.c中定義)中進(jìn)行,在該函數(shù)中先做必要的初始化工作(setup_arch()與paging_init()),各種trap入口就在該函數(shù)中通過(guò)調(diào)用trap_init()(traps.c)被設(shè)置,其中與系統(tǒng)調(diào)用有關(guān)的是:set_system_gate(0x80,&system_call);
“set_system_gate()”是一宏,它在“system.h”中被定義:
#define set_system_gate(n,addr)
_set_gate(&idt[n],15,3,addr)
……中斷描述表結(jié)構(gòu)(head.s)
其中“_set_gate()”也是在該文件中定義的宏:
#define _set_gate(gate_a
頁(yè)數(shù):12 字?jǐn)?shù):7036
Linux系統(tǒng)調(diào)用與ptrace分析
概述
1.Linux的系統(tǒng)結(jié)構(gòu)
在Linux系統(tǒng)結(jié)構(gòu)中,最核心的是計(jì)算機(jī)硬件,它提供對(duì)Linux軟件的支持,靠近硬件的內(nèi)層是Linux內(nèi)核程序(即操作系統(tǒng))。內(nèi)核直接和硬件打交道是程序和硬件之間的接口或界面。它對(duì)一切外層程序提供公共服務(wù),把外部程序同硬件隔離開(kāi)。內(nèi)核程序大致可分為文件系統(tǒng)管理,進(jìn)程管理,內(nèi)存管理等幾部分。進(jìn)程管理又分為低級(jí)進(jìn)程管理和高級(jí)進(jìn)程管理。低級(jí)進(jìn)程管理主要包括:進(jìn)程調(diào)度分配,控制占用處理器的程序和基本的進(jìn)程通信。高級(jí)進(jìn)程管理主要包括:進(jìn)程的創(chuàng)建,終止,進(jìn)程間通信,進(jìn)程在內(nèi)存和外存之間的轉(zhuǎn)儲(chǔ),信號(hào)機(jī)構(gòu)和進(jìn)程間跟蹤控制等。內(nèi)核程序的外層是實(shí)用程序,內(nèi)核提供對(duì)實(shí)用程序的支持,兩層之間的界面是系統(tǒng)調(diào)用。內(nèi)核外的實(shí)用程序通過(guò)系統(tǒng)調(diào)用來(lái)和內(nèi)核打交道。實(shí)現(xiàn)的過(guò)程是通過(guò)一種特殊的指令(陷入指令)進(jìn)入內(nèi)核,然后轉(zhuǎn)入相應(yīng)的系統(tǒng)調(diào)用處理程序。這也是本文將主要討論的問(wèn)題。
2.80386體系結(jié)構(gòu)
80386的體系結(jié)構(gòu)承認(rèn)兩類事件。
異常(exceptions)
中斷(interrupts)
他們兩都會(huì)引起“上下文轉(zhuǎn)換”同時(shí)建立一個(gè)過(guò)程或任務(wù),中斷可以隨時(shí)隨地發(fā)生(包括在執(zhí)行程序時(shí))所以用來(lái)響應(yīng)硬件信號(hào)。而異常則由指令內(nèi)部錯(cuò)誤引起。
每一個(gè)異?;蛑袛喽加幸粋€(gè)唯一的標(biāo)識(shí)符,在linux中被稱為向量。
指令內(nèi)部異常和NMI(不可屏蔽中斷)的中斷向量的范圍從0—31。32-255的任何向量都可以用做
可屏蔽中斷
編程(調(diào)試)異常
至于可屏蔽中斷則取決于該系統(tǒng)的硬件配置。外部中斷控制器在中斷響應(yīng)周期把中斷向量放到總線上。
3. Linux系統(tǒng)調(diào)用流程概述
Linux系統(tǒng)調(diào)用的流程非常簡(jiǎn)單,它由0x80號(hào)中斷進(jìn)入系統(tǒng)調(diào)用入口,通過(guò)使用系統(tǒng)調(diào)用表保存系統(tǒng)調(diào)用服務(wù)函數(shù)的入口地址來(lái)實(shí)現(xiàn),本文首先分析一般Linux系統(tǒng)調(diào)用的流程,然后再分析Linux系統(tǒng)調(diào)用sys_ptrace().
Linux系統(tǒng)調(diào)用的流程分析
設(shè)定0x80號(hào)中斷
系統(tǒng)啟動(dòng)后,先進(jìn)行初始化,其中一部分重要的工作在start_kernel()函數(shù)(main.c中定義)中進(jìn)行,在該函數(shù)中先做必要的初始化工作(setup_arch()與paging_init()),各種trap入口就在該函數(shù)中通過(guò)調(diào)用trap_init()(traps.c)被設(shè)置,其中與系統(tǒng)調(diào)用有關(guān)的是:set_system_gate(0x80,&system_call);
“set_system_gate()”是一宏,它在“system.h”中被定義:
#define set_system_gate(n,addr)
_set_gate(&idt[n],15,3,addr)
……中斷描述表結(jié)構(gòu)(head.s)
其中“_set_gate()”也是在該文件中定義的宏:
#define _set_gate(gate_a