linux - 如何编辑linux内核文件?

标签 linux ubuntu linux-kernel fork

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

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

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

我只想以打印进程是否创建的方式编辑 fork.c。

请忽略我说的那些没用的东西,如果你能在步骤中给出修改fork.c然后使用它的答案就太好了。

最佳答案

因此 Linux 有一个有用的技巧,您可以使用它以更简单的方式完成此操作。它叫做LD_PRELOAD .

使用这个技巧,我们可以创建一个共享库,然后将其注入(inject)到另一个进程中。此共享库将能够在调用 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

关于linux - 如何编辑linux内核文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22763565/

相关文章:

c++ - 在 Linux 上与 C++ IDE 作斗争

android - 在 Android : can't compile because of missing "GLES_CM" 上使用 SDL

macos - .emacs 识别操作系统的代码?

mysql - 如何从 Ubuntu 终端读取一组字符串并将该值插入 MySQL

android - 桌面文件到安卓手机的自定义通知

c++ - 使用 OpenSSL BIO 的非阻塞 I/O

ubuntu - 使用 prefer-dynamic 时无法执行 hello world 项目

c - 如何为内核和设备驱动程序开发设置 YouCompleteMe?

linux - 没有IP的后台进程会受到键盘输入的影响吗?

linux - 操作系统如何抢占进程并重新获得控制权?