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

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

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

我想使用这个ptr到达进程描述符地址。

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

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

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

linux-kernel process math macros stack
1个回答
0
投票

我会做这样的事情:

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

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

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

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