如何编辑linux内核文件?

时间:2014-03-31 13:58:46

标签: linux ubuntu linux-kernel fork

我正在使用fork函数创建一个子进程,我想以一种方式编辑它,无论何时调用它都应该打印是否创建进程,(我这样做只是为了练习,我知道这是没用的。)

我研究过的是fork函数是在linux / kernel中名为fork.c的文件中定义的。我不知道我的ubuntu操作系统中这个文件夹在哪里,如果我以某种方式访问​​fork.c那么操作系统是否允许我编辑?

我还读过,为此我必须下载另一个内核,然后用令人不安的原始内容编辑下载的内核(这很令人头痛)。

我只想以一种在创建进程时打印的方式编辑fork.c。

Plzz忽略了我所说过的任何无用的东西,如果你能给我答案来修改fork.c然后再使用它会很棒。

1 个答案:

答案 0 :(得分:2)

因此Linux有一个有用的技巧,你可以用更简单的方式来做到这一点。它被称为LD_PRELOAD

使用这个技巧,我们可以创建一个共享库,我们将其注入另一个进程。此共享库将能够在调用fork()之前和之后运行代码。

共享库代码

#define _GNU_SOURCE

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dlfcn.h>

static pid_t (*real_fork)(void);

pid_t fork(void)
{
    printf("Fork is called\n");
    if (real_fork == NULL)
        real_fork = (pid_t (*)(void))dlsym( RTLD_NEXT, "fork" );
    return real_fork();
}

演示应用程序代码

#include <unistd.h>

int main() {
    fork();
    fork();

    return 0;
}

展示如何将它们放在一起

[10:19am][wlynch@apple preload] gcc -Wall test.c -o test
[10:19am][wlynch@apple preload] gcc -shared -ldl -fPIC fork.c -o fork.so 
[10:20am][wlynch@apple preload] ./test
[10:20am][wlynch@apple preload] env LD_PRELOAD=/tmp/preload/fork.so ./test
Fork is called
Fork is called
Fork is called