调用原始系统调用或 libc 包装器的宏

问题描述 投票:0回答:1

我想要一个宏,它基于第一个参数调用原始系统调用或 libc 包装器。例如

#define SYSCALL_VARIANT(variant, scall, ...) \
    do { \
        if (variant) \
            syscall(__NR_ scall,  ##__VA_ARGS__); \
        else \
            scall(##__VA_ARGS__); \
    } while (0)

if (SYSCALL_VARIANT(0, pkey_mprotect, buffer, size, prot, pkey)) == -1)
    ...

我不知道如何加入

__NR_
scall
例如
__NR_pkey_mprotect
。还可能吗?

c macros system-calls
1个回答
0
投票

正确答案(感谢https://godbolt.org回复:))

#define SYSCALL_VARIANT(variant, scall, ...) \
    do { \
        if (variant) \
            syscall(__NR_ ## scall,  __VA_ARGS__); \
        else \
            scall(__VA_ARGS__); \
    } while (0)

if (SYSCALL_VARIANT(0, pkey_mprotect, buffer, size, prot, pkey)) == -1)
    ...
© www.soinside.com 2019 - 2024. All rights reserved.