gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:40 29 4
gpt4 key购买 nike

我正在使用创建子进程的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com