絕好!動態新增系統呼叫

2021-06-06 00:25:10 字數 1237 閱讀 3139

大三了,選了一門作業系統實驗課。

第乙個實驗就要求為linux新增系統呼叫。

於是乎,照著網上的教程一步步做。

奈何,編譯核心這步實在太頭疼了,雖然第一次就成功了,但是在效能還行的台式電腦上居然還花了兩個半小時!

接著,感覺教程上的系統呼叫好弱智,我又寫了個複雜一些的函式,想把它加進去試一試。

這次出問題了,我用筆記本編譯了2個小時後,突然蹦出個錯誤,編譯終止!

仔細對了一下教程,原來是少敲了」sys_「,在這一瞬間,我有種想砸電腦的衝動!

兩個小時啊,我是用我那百般無辜的水汪汪的大眼睛盯著螢幕度過的,說得有點過。

反正就是不服氣,為什麼編譯器偏偏就在這最後關頭才發現這個錯誤,有錯你早說嘛,我改還不行麼,

可是你為什麼2個小時後才告訴我,我的時間就不是時間嗎?

然後,我就萌生了這樣乙個想法,能不能動態地新增系統呼叫呢?

度娘告訴我,能!

於是乎,瘋狂找教程,瘋狂試**,結果沒乙個可以用。

問題總是出在sys_call_table上,它是系統呼叫表的首址。

因為sys_call_table無法直接extern

所以只好來狠的,直接給它賦值!

可是,如何得到sys_call_table的位址呢,我看了不下5種方法,都太複雜,

只有一種深深地打動了我,那就是。。。

cat /proc/kallsyms | grep sys_call_table

當然,需要root許可權。

這是我的結果

c1504160 r sys_call_table

可見,其位址為0xc1504160。

很激動,終於可以開工了。

首先,挑選系統呼叫號,我決定把rmdir這個命令對應的系統呼叫該掉!!!

vim /usr/src/linux/arch/x86/include/asm/unistd_32.h

發現它對應的號碼是40

嘿嘿,模組的**如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define _nr_mycall 40

#define sys_call_table_adress 0xc1504160

嘿嘿 大功告成了,現在我的rmdir終於不能用了,哈哈!

linux 新增系統呼叫

此文於2010 02 26被推薦到csdn首頁 如何被推薦?新的建立檔案描述符的 syscall 一般都支援額外的 flags 引數,可以直接指定 o nonblock 和 fd cloexec,例如 以上 6 個 syscalls,除了最後乙個是新功能,其餘的都是增強原有的呼叫,把數字尾號去掉就是...

核心新增系統呼叫

在 windows 下新增系統呼叫不像 linux 那樣容易,windows 系統呼叫與使用者程式之間還有 ntdll.dll 層,而這一層微軟沒有提供源 但是我們從系統呼叫的實現機制出發,不管是在 linux 還是windows 系統呼叫的實現都是通過中斷來實現的,可以利用中斷的方式呼叫新新增的系...

Linux新增系統呼叫

修改核心 新增函式,新增函式宣告以及新增系統呼叫id,來實現給自己編譯的核心新增系統呼叫。當然這個過程是在編譯核心之前完成的,核心編譯過程請參照linux核心編譯 進入解壓的檔案目錄 cd usr src linux 5.1 kernel在sys.c中新增函式 執行vim sys.c使用vim開啟s...