在
windows
下新增系統呼叫不像
linux
那樣容易,
windows
系統呼叫與使用者程式之間還有
ntdll.dll
層,而這一層微軟沒有提供源**,但是我們從系統呼叫的實現機制出發,不管是在
linux
還是windows
系統呼叫的實現都是通過中斷來實現的,可以利用中斷的方式呼叫新新增的系統呼叫。
下面以本實驗新增的系統呼叫為例詳細介紹新增和使用方法。
下面是新增系統呼叫的基本過程,新增的系統呼叫名為
my_sysall:
1)修改檔案
ntos/ke/i386/systable.asm:
①在第392行插入語句:
table_entrymy_sysall,1,3 ②
將下面緊挨著的一條語句改為:
table_end 296 這裡
296說明當前系統共實現
296個系統呼叫,而新新增的系統呼叫號就是
296(
128h
),使用者態可以通過往
eax暫存器存放
128e
,然後執行
int 2eh
即可執行新新增的系統呼叫。 2)
修改檔案
public/sdk/inc/ntexapi.h:
從第2766
行開始插入語句(其實只是乙個函式宣告):
ntsyscallapi long ntapi
ntmy_sysall(_ _in long input, _ _out plong output,_ _out plong page);
3)修改檔案
ntos/ps/creat.c
,主要對程序相關結構操作,所以考慮在這裡新增系統呼叫。 第
43行插入如下**:
#pragma alloc_text(page, ntmy_sysall)
檔案的最後插入該函式的實現:
long ntmy_sysall (__in long input, __out plong output,__out plong page)
4)修改檔案
ntos/init/ntoskrnl.src:
在第912
行插入字串:
ntmy_sysall 5)
使用cd /wrk-v1.2/base/ntos和
nmakex86=
編譯核心,將新生成的核心映像檔案
wrkx86.exe
替換原核心映像,
並用新核心啟動系統。
下面說明使用者態如何呼叫新新增的系統呼叫在vc
中建立應用程式,新增如下**:
long __stdcall add_syscall(in long input, out plong output,out plong page)
}之後就可以通過
add_syscall
來呼叫新增的系統呼叫了。
Linux 核心編譯 新增系統呼叫
主機 ubuntu 11.04 現在核心版本 2.6.38.9 編譯的目標核心版本 2.6.39 編譯成功後修改核心,新增個系統呼叫,並重新編譯核心,編寫c程式,呼叫自己新增的系統呼叫 首先編譯核心 2 解壓核心到任意目錄 這裡不用必須解壓到 usr src 下,linus也說不必那樣做,況且自己也...
二。向核心中新增系統呼叫
核心版本 3.4.24 大家發現什麼問題一定要告訴我,大家一起學習啦 向核心中新增系統呼叫 1.系統呼叫是和平台相關的 arm平台的系統呼叫的彙編 路徑 vim 從333行開始 2.新增系統呼叫的步驟 存著系統呼叫表,系統呼叫的函式入口就是這 系統呼叫號就是基於基位址的配偏移位址 vim linux...
Linux核心系統呼叫的新增
本文通過自身實踐,介紹了在linux下為核心新增系統呼叫的簡單例項。系統呼叫 作業系統為使用者態程序與硬體及核心資源進行互動提供的一組介面 系統呼叫可被看成是乙個核心與使用者空間程式互動的介面。優點 極大的提高了系統的安全性 使使用者程式具有可移植性。系統呼叫與核心函式 核心函式在形式上與普通函式一...