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

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

我正在尝试使用Pin或DynamoRIO之类的工具来跟踪Linux中的系统调用。从这些工具中,我可以看到执行了哪些系统调用,输入参数的值是什么以及返回值。但是某些系统调用(例如access)具有一个整数值,该整数值可能与其他一些整数值进行按位或运算。

例如,在访问系统调用中,mode可以是F_OKR_OKW_OKX_OK或其中两个或多个的按位或。

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

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

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

传递给函数的内容已经被传递者(您是谁)知道了。此外,由于机器的体系结构或操作系统,它们的整数值可能因机器而异。在我的Apple机器上,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。现在,您可以通过咬牙来操纵它们。您需要检查头文件中是否有使用的常量。

© www.soinside.com 2019 - 2024. All rights reserved.