C语言 如何在 Linux 中解码系统调用的输入标志?



我正在尝试使用Pin或DynamoRIO等工具跟踪Linux中的系统调用。从这些工具中,我可以看到执行了哪些系统调用,输入参数的值是多少,还返回了值。但是某些系统调用(如access(具有一个整数值,该整数值可能是其他一些整数值的按位 OR 运算。

例如,在接入系统调用中,mode可以是其中两个或多个F_OKR_OKW_OKX_OK或按位或

int access(const char *pathname, int mode);

如何解码整数值(我知道该值已作为输入传递给系统调用(以查看系统调用中启用了哪些标志?

你传递给函数的内容已经被传递者知道了,你是谁。此外,由于其体系结构或操作系统,它们的整数值可能因机器而异。在我的苹果机器上,unistd.h涉及以下内容。

/* access function */
#define F_OK            0       /* test for existence of file */
#define X_OK            (1<<0)  /* test for execute or search permission */
#define W_OK            (1<<1)  /* test for write permission */
#define R_OK            (1<<2)  /* test for read permission */

如你所知,它们分别是0000000100100100。现在,您可以通过位操作它们。您需要检查头文件内部是否使用了常量。

最新更新