久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

添加一個系統(tǒng)調用,,遍歷所有進程 - 涌泉*閃閃

 jijo 2009-12-30
添加一個系統(tǒng)調用,,遍歷所有進程

添加一個系統(tǒng)調用,,遍歷內核進程

 

環(huán)境:Fedora 12

內核:linux-2.6.32.2

 

STEP  0: 編譯一個linux-2.6.32.2內核,且能夠正常啟動,。上一篇博客已經(jīng)講了,。


STEP  1: linux-2.6.32.2/arch/x86/kernel 目錄中,找到syscall_table_32.S,
在這個文件的最后一行,,添加:.long sys_mycall

      

.long sys_mycall


STEP  2: linux-2.6.32.2/arch/x86/include/asm目錄下,,找到unistd_32.h,
在這個文件的 #define NR_syscalls 337前面加:#define __NR_mycall  337,同時把NR_syscalls改成338.


#define __NR_mycall 337
#ifdef __KERNEL__

#define __NR_syscalls 338

NR_syscalls,相當于系統(tǒng)調用表邊界,所有系統(tǒng)號都得小于它,。

STEP  3:
linux-2.6.32.2/include/linux 目錄中,,找到syscalls.h, 在這個文件中添加:asmlinkage long sys_mycall(void); 我認為這為系統(tǒng)調用函數(shù)聲明。


asmlinkage long sys_mycall(void);


STEP 4: 實現(xiàn)系統(tǒng)調用.在linux-2.6.32.2/kernel目錄下,,找到sys.c,在里面添加入系統(tǒng)調用的實現(xiàn)程序,。在linux-2.6.32里面,跟以前的版本不一樣,,這里用到了宏SYSCALL_DEFINE0對系統(tǒng)調用進行了封裝,。難怪網(wǎng)上的都在說找不到系統(tǒng)調用的定義。

next_task是內核定義的一個宏,,用于尋找進程鏈表的下一個進程指針,。程序如下:


SYSCALL_DEFINE0(mycall)
{
    struct task_struct *p;
    printk("********************************************\n");
    printk("------------the output of mycall------------\n");
    printk("********************************************\n\n");
    printk("%-20s %-6s %-6s %-20s\n","Name","pid","state","ParentName");
    for(p = &init_task; (p = next_task(p)) != &init_task;)
        printk("%-20s %-6d %-6d %-20s\n",p->comm , p->pid, p->state, p->parent->comm);
    return 1;
}


STEP 5: 編譯內核。make; make install;重啟,;

STEP 6: 測試系統(tǒng)調用,。編寫程序test.c。前面我們定義了mycall的系統(tǒng)調用號是337.所以,,在程序中,,調用mycall的語句就是:syscall(337).程序如下:



#include<stdio.h>
int main()
{
    if(syscall(337))
        printf("ok!\n");
    else
        printf("failed!\n");
    return 0;
}


STEP 7: 編譯test.cgcc test.c –o test, 執(zhí)行 ./test.


STEP 8: 查看printk的輸出,。printk函數(shù)的輸出被記錄在 /var/log/messges里面,。

輸入,cat /var/log/messges. 可以得到:




Dec 25 11:37:05 localhost kernel: *******************************************
Dec 25 11:37:05 localhost kernel: --------the output of mycall------------
Dec 25 11:37:05 localhost kernel: *****************************************
Dec 25 11:37:05 localhost kernel:
Dec 25 11:37:05 localhost kernel: Name        pid     state   ParentName
Dec 25 11:37:05 localhost kernel: init        1       1       swapper
Dec 25 11:37:05 localhost kernel: kthreadd    2       1       swapper
Dec 25 11:37:05 localhost kernel: migration/0 3       1       kthreadd
Dec 25 11:37:05 localhost kernel: ksoftirqd/0 4       1       kthreadd
Dec 25 11:37:05 localhost kernel: watchdog/0  5       1       kthreadd
Dec 25 11:37:05 localhost kernel: events/0    6       1       kthreadd
Dec 25 11:37:05 localhost kernel: cpuset      7       1       kthreadd
Dec 25 11:37:05 localhost kernel: khelper     8       1       kthreadd
Dec 25 11:37:05 localhost kernel: netns       9       1       kthreadd

………………



后記:這篇博客主要講了添加系統(tǒng)調用的步驟,,和一些基本的解釋,。然而,系統(tǒng)調用是一個非常復雜的過程,,涉及到很多東西,。我將在下一篇博客重點分析系統(tǒng)調用,由表及里,,層層剝離下去,。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多