我想从基本的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
地址时出现段错误。
答案 0 :(得分:0)
thread_info
结构供内核使用,而不供进程使用。它的指针将是物理地址,而不是虚拟地址。结果,您将无法从用户空间程序中取消引用它们。