如何使用算术和掩码舍入地址?

时间:2017-11-16 07:58:43

标签: linux-kernel process math macros stack

我有一个指针ptr,它的地址在内核堆栈空间中。

我想使用此ptr来获取进程描述符地址。

由于内核堆栈空间和进程描述符大小一起为8kb,我知道我需要向下舍入ptr的地址以获取进程描述符的地址。

(具有内核堆栈且进程描述符的块以地址编号为8的乘法开始)

我怎么能在宏中这样做?我需要使用什么面膜?

1 个答案:

答案 0 :(得分:0)

我会做这样的事情:

#include <stdint.h>
#define MASK 0x01FF

int a = 0;
intptr_t b = (intptr_t)&a;
b &=~MASK;
int * c= (int *)b;

inptr_t是一个足以容纳指针的类型,这就是为什么我选择它超过标准整数