分享
 
 
 

如何在Linux Kernel內新增一个System Call

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

本文作者: gpmoney

使用 system call 去呼叫系統的函式是非常好玩的,但是要如何寫出一個自己的system call 呢?這邊有以下數個步驟,如果你是自己想要呼叫 system call 那可以跳過 (1) (2) 直接到第三項這邊假設你己經熟悉 kernel 的 compile 和如何利用新 compile 的 kernel 重新開機

(1) 設定 include 檔內的 syscall function

首先,找到 /usr/inlcude/asm/unistd.h 這個檔案,在這一行

#define __NR_getdents64 220

#define __NR_fcntl64 221

的後面加上 :

#define __NR_myfunc 222

然後找到 /usr/include/bits/syscall.h 這個檔案,再加上一行 :

#define SYS_myfunc __NR_myfunc

找到 /usr/src/linux/arch/i386/kernel/entry.S 這個檔案也是在最後面加上並修改標記為紅色的這二行

.long SYMBOL_NAME(sys_getdents64) /* 220 */

.long SYMBOL_NAME(sys_fcntl64)

.long SYMBOL_NAME(sys_myfunc) --> 增加這一行

#ifdef CONFIG_TUX

.long SYMBOL_NAME(__sys_tux)

#else

# ifdef CONFIG_TUX_MODULE

.long SYMBOL_NAME(sys_tux)

# endif

#endif

/*

* NOTE!! This doesn't have to be exact - we just have

* to make sure we have _enough_ of the "sys_ni_syscall"

* entries. Don't panic if you notice that this hasn't

* been shrunk every time we add a new system call.

*/

.rept NR_syscalls-222 ----> 改成 NR_syscalls-223

.long SYMBOL_NAME(sys_ni_syscall)

.endr

(2) 撰寫 syscall 的範例程式

假設你的 linux kernel code 在 /usr/src/linux 下找到 /usr/src/linux/kernel/sys.c

加上以上這幾行 :

asmlinkageintsys_myfunc(int input){

printk("<1> Input value is : %d \n",input);

return input*10;

}

改完以後,就可以重新 compile kernel 並且重新開機了。

(3) 撰寫 user space 的小程式

use_syscall.c

#include

#include

#include

static inline _syscall1(int,myfunc,int,a)

int main(void){

printf("Return Value: %d\n",myfunc(10));

}

這樣執行完以後,你就可以看到這個程式輸出 100

如果你還有興趣,可以使用 tail -f /var/log/message 會出現類似的訊息,表示你的程式有經由 printk 印到畫面上

Sep 3 22:02:02 private kernel: Input value is : 10

_syscall1 是一個 macro 指令,事實上是 _syscallN 的指令 , N 代表系統呼叫所需要用到的參數個數

_syscallN(arg1,arg2,arg3,arg4) :

arg1 : 代表的是傳回值

arg2 : 代表的是要呼叫的 syscall name

arg3 : 代表的是傳入參數的型態

arg4 : 代表的是傳入參數的名稱

系統總共定義了 6 個 _syscallN , 從 _syscall0 到 _syscall5 . 因為這是呼叫 int 0x80 的限制,各位大概發現了一件事,這個只是協助各位去呼叫 int 0x80 這個系統中斷函式,不過 linux 幫我們包的很好

(4) 編譯程式

#gcc -O2 use_syscall.c use_syscall

#./use_syscall

Return Value: 100

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有