我们可以通过一些内核代码访问任何物理内存吗? 因为,我写了一个只有init_module和exit_module的设备驱动程序,代码如下。
int init_module(void) { unsigned char *p = (unsigned char*)(0x10); printk( KERN_INFO "I got %u n",*p); return 0; }
和一个虚拟的exit_module ..问题是当我做lsmod的时候计算机被挂起了。会发生什么? 我应该得到一些许可访问的MEM位置?
好心解释..我是初学者!
如何调用MyChecksum而不是KernelChecksum(KernelChecksum汇编编码)
开发没有信息的驱动程序
这个内联汇编的意义是什么(:“0”(THREAD_SIZE – 1))在Linux内核2.6.11中为i386
虚拟内存分配没有物理内存分配
如何在Process Explorer中获得进程开始地址的“名称”?
强制驱动程序与设备匹配
有没有办法让Splint或类似的静态检查器与Linux内核模块一起工作?
这是在ntoskrnl.exe tolower的实施中的一个大错误?
为什么mm_struct-> start_stack和vm_area_struct-> start不指向相同的地址?
内核内存在Windows操作系统中包含什么?
要访问真实的物理内存,您应该使用phys_to_virt函数。 如果是内存(如PCI内存),你应该仔细看看ioremap。
这整个话题是非常复杂的,如果你是一个初学者,我会建议一些内核/驱动程序开发的书籍/文档。
我建议阅读本书关于记忆的章节:
http://lwn.net/coreel/LDD3/
它可以在线免费获得。 好东西!
在内核内部,内存仍然是虚拟映射的,只是与用户空间不一样。
这个机会是0x10是在一个守卫页面或什么东西,捕捉空指针,所以当你触摸它时,它会在内核中产生一个未处理的页面错误。
通常这会导致OOPS不是挂起(但可以配置为引起恐慌)。 OOPS是一个意外的内核条件,在某些情况下可以恢复,并不一定会降低整个系统。 通常它会杀死任务(在这种情况下,insmod)
你是否在桌面Linux系统上加载了GUI? 我建议你设置一个Linux虚拟机(Vmware,virtualBox等),如果你想破解内核的话,用一个简单的(即快速重启)文本分发。 你会崩溃一下,你想它尽快重新启动。 另外通过使用基于文本的分发,更容易看到内核崩溃消息(糟糕或恐慌)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。