更改linux内核系统调用号

4x6*_*6hw 6 glibc system-calls linux-kernel

我想用不同的syscall表构建我自己的自定义内核.(相同的系统调用但在不同的位置/数字)

我正在研究内核3.2.29.

更改内核非常简单:

1)更改arch/x86/kernel/syscall_table_32.S中的系统调用位置

2)更改arch/x86/include/asm/unistd_32.h中的系统调用宏编号

3)编译和安装新内核

我改变了系统调用:sys_open占据了地点和数量sys_read,反之亦然.

我想如果我glibc使用修改后的内核头文件编译,我可以有一个正在运行的系统,但不幸的是,这还不够,我的系统无法启动.

我错过了什么吗?为了拥有一个正在运行的系统,我还需要做些什么?


我采取的步骤是:

1)按照我的问题描述构建和安装内核

2)使用提取新的内核头 make headers_install INSTALL_HDR_PATH=[path]

3)用参数构建glibc --with-headers=[path/include]

4)我使用live cd从外部访问文件系统以便安装新的glibc,使用make install install_root=[the original file system](因此系统在安装期间不会中断)

我希望新的glibc建造得当,但我不确定.

之后,在启动系统时,启动在(initrafms)shell屏幕中停止:我想我需要重建它initrd,但是如何根据新的syscall表编译它?

tmy*_*ebu 0

扰乱系统调用号确实会造成伤害。您至少需要重建系统和 initrd 上的所有静态链接二进制文件(如果您使用的话)。