gpt4 book ai didi

c - 在给定指针的情况下从内核内部访问内核内存

转载 作者:IT王子 更新时间:2023-10-29 01:10:32 24 4
gpt4 key购买 nike

我正在尝试了解内核,一段时间以来一直在尝试打印构成内核景观的一些基本数据结构,但没有成功。我的问题是给定一个内存地址,我希望能够打印该地址的内容。

比如我有一个判断IDT位置的函数。它按 0xffff81b8c0000fff 的顺序返回 (void *)。但是,每当我尝试 printk 该地址的内容时,结果都是内核 panic 。我知道有适当的保护措施来防止从用户空间访问内核内存,但我试图从 start_kernel 中执行此操作,我认为它们是可读的。

代码是:

idt_ptr = sidt(); // returns (void *)
printk(KERN_INFO "680: IDT TABLE, FIRST ENTRY\n");
//entry is 64 bits
printk(KERN_INFO "680: %llx\n", *(unsigned long long *)idt_ptr);

这是进行此尝试后发生的内核 panic 的尾声:

enter image description here

看来我需要一个信号量来进行读取访问,但这不就是一个任意地址吗?

最佳答案

For example, I have a function that determines the location of IDT. It returns (void *) on the order of 0xffff81b8c0000fff

除了 char* 之外,没有任何指针可能等于 0x...ff —— 对于指向包含任何内容的数据结构的指针,该地址未正确对齐除了 char 之外。

结论:您的 sidt 函数已损坏并返回虚假地址。

关于c - 在给定指针的情况下从内核内部访问内核内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com