#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
);
转载请注明原文地址: https://lol.8miu.com/read-23132.html