我想要一个宏,它基于第一个参数调用原始系统调用或 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
。还可能吗?
正确答案(感谢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)
...