我正在尝试使用Pin或DynamoRIO等工具跟踪Linux中的系统调用。从这些工具中,我可以看到执行了哪些系统调用,输入参数的值是多少,还返回了值。但是某些系统调用(如access
(具有一个整数值,该整数值可能是其他一些整数值的按位 OR 运算。
例如,在接入系统调用中,mode
可以是其中两个或多个F_OK
、R_OK
、W_OK
、X_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 */
如你所知,它们分别是0000
、0001
、0010
、0100
。现在,您可以通过位操作它们。您需要检查头文件内部是否使用了常量。