gpt4 book ai didi

linux-kernel - 具有 > 6 个参数的 Linux 系统调用

转载 作者:行者123 更新时间:2023-12-02 04:38:00 39 4
gpt4 key购买 nike

是否可以编写一个具有超过 6 个输入参数的(linux 内核)sycall 函数?查看 header ,我发现定义的系统调用宏最多有 6 个参数。我很想尝试定义 SYSCALL7 和 SYSCALL8 以允许 7 和 8 个参数,但我不太确定这是否真的有效。

最佳答案

对于 x86,以下函数(来自 x86...syscall.h)复制参数:

static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned int i, unsigned int n,
unsigned long *args)
{
BUG_ON(i + n > 6);
memcpy(args, &regs->bx + i, n * sizeof(args[0]));
}

此功能在 asm_generic/syscall.h 的评论中有很好的描述。 .它将参数复制到系统调用中,并且有 6 个参数的限制。它可以根据体系结构以多种方式实现。对于 x86(从上面的代码片段来看),参数似乎都是通过寄存器传递的。

因此,如果您想传递超过 6 个参数,请使用结构。如果您必须有一个 SYSCALL7,那么您将不得不创建一个自定义内核并可能修改系统调用过程的几乎每个步骤。 x86_64 可能更容易适应这种变化,因为它比 x86 有更多的寄存器。

关于linux-kernel - 具有 > 6 个参数的 Linux 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517811/

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