gpt4 book ai didi

c - 是什么导致 -EPERM 返回为 4294967295?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:39 25 4
gpt4 key购买 nike

我正在使用我正在编写的内核模块劫持一个特定的系统调用。替换代码是这样的:

asmlinkage int custom_setxattr(const char* __user path, const char* __user name, const void* __user value, size_t size, int flags) {
if (!strncmp("security.checksum.", name, 18) {
return -EPERM;
}
return real_setxattr(path, name, value, size, flags);
}

使用模块运行 strace 会打印出包含以下行的分析:

setxattr("file", "security.checksum.value", "Test", 4, 0) = 4294967295

C 类型 int有符号,所以我不应该看到值 4294967295(将 -1 解释为无符号整数时得到的值)。这实际上已经发生在我的另一个系统调用拦截中,但其他人没有。为什么是这样? setxattr 能够返回-EPERM

最佳答案

strace 似乎不够聪明,无法知道哪些系统调用返回有符号值,哪些系统调用返回无符号值,因此它只是为所有内容打印无符号值。正如您所指出的,如果将 -1 的 32 位二进制补码表示重新解释为无符号 32 位整数,则得到 4294967295。至少在我的系统上,EPERM 定义为 1。所以 EPERM,表示为一个无符号的 32 位整数,是 4294967295

关于c - 是什么导致 -EPERM 返回为 4294967295?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27883482/

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