通过object_is_on_stack检测指针是否在stack上

来源:互联网 发布:野草教学设计软件 编辑:程序博客网 时间:2024/06/04 18:04
我们知道kernel中的stack很小,当别人传递给一个数组,如果这个数组很大的话,就需要检查这个数组是在stack上还是在堆上,kernel还提供了一个函数用于检查某个变量是否在stack上,不限于数组
static inline int object_is_on_stack(void *obj)
{
    void *stack = task_stack_page(current);

    return (obj >= stack) && (obj < (stack + THREAD_SIZE));
}
 这个函数返回1的话,就说明在stack上就要额外留心
而这个函数的实现原理很简单,首先通过task_stack_page拿到这个task的stack,然后检测这个地址是否在stack范围内就可以了
static inline void *task_stack_page(const struct task_struct *task)
{
    return task->stack;
}
#define THREAD_SIZE        16384
同时可知每个task有16k的stack
阅读全文
0 0