2020-10-21

it2025-02-12  4

#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/mm.h> #include <linux/sched.h> MODULE_LICENSE("CPL"); static pid_t pid; module_param(pid,int,0644); int print_vma(void) { struct task_struct *task; struct mm_struct *mm; struct vm_area_struct *vma; printk("\n\n\n\n\n\n"); printk("begin to print virtual address space...\n"); printk("\n"); task = pid_task(find_vpid(pid), PIDTYPE_PID); mm = task->mm; printk("executable name:%s pid:%d\n", task->comm, task->pid); printk("\n"); printk("start_code:0x%lx end_code:0x%lx\n", mm->start_code, mm->end_code); printk("start_data:0x%lx end_data:0x%lx\n", mm->start_data, mm->end_data); printk("\n"); printk("start_brk:0x%lx end_brk:0x%lx\n", mm->start_brk, mm->brk); printk("\n"); printk("start_stack:0x%lx\n", mm->start_stack); printk("\n"); down_read(&mm->mmap_sem); for(vma=task->mm->mmap; vma; vma=vma->vm_next) { printk("0x%lx - 0x%lx", vma->vm_start, vma->vm_end); if (vma->vm_flags & VM_READ) printk("r"); else printk("-"); if (vma->vm_flags & VM_WRITE) printk("w"); else printk("-"); if (vma->vm_flags & VM_EXEC) printk("x"); else printk("-"); if (vma->vm_flags & VM_SHARED) printk("s"); else printk("p"); printk("\n"); } up_read(&mm->mmap_sem); return 0; } static int __init print_vma_init(void) { print_vma(); return 0; } static void __exit print_vma_exit(void) { printk("goodbye, kernel!\n"); } module_init(print_vma_init); module_exit(print_vma_exit);
最新回复(0)