请问给位大虾: vmalloc分配内存时对主内核页表的修改是怎样传到进程页表的?我知道是在缺页时传的,但复制的只是PGD还是连PMD和PTE一起复制? 那vfree修改的页表又怎样传给进程页表呢?
原来有帖子涉及的这个问题,但没有最后结论。用下面方法可以重现vmalloc_fault: 实现过程: 1) 在文件arch/i386/mm/fault.c 中的vmalloc_fault: 后面加 vmalloc_fault_count++; 此变量在fault.c中定义为全局并EXPORT出去。 2) 改动sys_open(), 加一个变量vmalloc_buffer 并EXPORT 改动程序,使特殊文件名字时判断此变量,如果有合法数值就显示它指向的内存的128M/4096个页的前几个字符。 3)做一个APP程序每5秒调用sys_open...
vmalloc_RESERVE和896M LINUX 内核虚拟地址空间到物理地址空间一般是固定连续影射的。 假定机器内存为512M, 从3G开始,到3G + 512M 为连续固定影射区。zone_dma, zone_normal为这个区域的。固定影射的VADDR可以直接使用(get a free page, then use pfn_to_virt()等宏定义转换得到vaddr)或用kmalloc等分配. 这样的vaddr的物理页是连续的。得到的地址也一定在固定影射区域内。 如果内存紧张,连续区域无法满足,调用vmalloc分配...
驱动里面 mmap函数: volatile void *offset=(volatile void *)kmalloc(100,GFP_ATOMIC); vma->vm_flags |= VM_RESERVED; physical_addr=virt_to_phys(offset); if (remap_page_range(vma->vm_start, physical_addr ,vma->vm_end-vma->vm_start, vma->vm_page_prot)) { printk("remap error\n"); return -EAGAIN; } line_addr=offset; 应用程序...
我用了别人写得hashlist程序,不过这个程序是在内核下运行的很好,我现在想在用户空间程序中用,gcc编译的时候加上了-D_KERNEL__参数,编译通过,连接时出现undefined reference to kmalloc,undefined reference to kfree等错误,我看了hashlist.c源程序,调用了kmalloc,kfree等函数,我的问题是,在用户空间我可不可以使用这个程序,可以的话,编译时应该加上那个库文件才能解决上述错误。还请大虾们帮忙,项目很紧,不胜感谢!
I call it,but gcc said that linux/malloc.h no such file or dir I found vmalloc.h and call vmalloc,but can't do it too when i call vmalloc gcc said in /usr/include/linux/vmalloc.h: parse error before "pgprot_t"
I call it,but gcc said that linux/malloc.h no such file or dir I found vmalloc.h and call vmalloc,but can't do it too
Linux内核溢出研究系列(2) - kmalloc溢出技术 作者:grip2 <[email]gript2@hotmail.com[/email]> 日期:2006-04-12 内容: 1 -- 介绍 2 -- kmalloc/slab简介 3 -- kmalloc/slab的关键特性 4 -- kmalloc exploit 5 -- 更进一步 6 -- 最后 7 -- 参考资料 8 -- 附录 (kexp-msfilter.c) 一、** 介绍 关注isec很长时间了,一直对他们在Linux内核方面的技术研究成果很佩服,同时自己也一直 在跟踪...