从Userland程序读取内核堆栈

时间:2019-04-04 13:07:31

标签: c linux-kernel segmentation-fault

我想从基本的C程序中读取内核内存堆栈。

我正在使用x86-64位Linux计算机。

我的目标是阅读#include <stdio.h> #include <unistd.h> typedef unsigned int __u32; struct thread_info { struct task_struct *task; struct exec_domain *exec_domain; __u32 flags; __u32 status; __u32 cpu; int saved_preempt_count; /* ... */ }; static inline struct thread_info *stack_thread_info(void) { int PAGE_SIZE = 8 * 1024; // 8Kb on 64 bits int THREAD_SIZE = PAGE_SIZE << 2; struct thread_info *ti; __asm__("andq %%rsp,%0; ":"=r" (ti) : "0" (~(THREAD_SIZE - 1))); return ti; } void main() { struct thread_info *ti = stack_thread_info(); printf("%lx\n",ti->task); } 结构。

这是我所做的:

task_struct

尝试显示select col1, CONVERT(VARCHAR(100), col2) As Col2Covertedasexample from tab1 地址时出现段错误。

1 个答案:

答案 0 :(得分:0)

thread_info结构供内核使用,而不供进程使用。它的指针将是物理地址,而不是虚拟地址。结果,您将无法从用户空间程序中取消引用它们。