kernel_hack
kernel_hack copied to clipboard
fix*
bool read_process_memory(pid_t pid, uintptr_t addr, void *buffer, size_t size) { struct task_struct *task; struct mm_struct *mm; struct pid *pid_struct; phys_addr_t pa;
pid_struct = find_get_pid(pid);
if (!pid_struct) {
return false;
}
task = get_pid_task(pid_struct, PIDTYPE_PID);
if (!task) {
return false;
}
mm = get_task_mm(task);
if (!mm) {
return false;
}
mmput(mm);
while (size > 0) {
//当前页剩余字节
int diff = addr % PAGE_SIZE == 0 ? PAGE_SIZE :
PAGE_SIZE - addr % PAGE_SIZE;
if (size < diff) {
diff = size;
}
pa = translate_linear_address(mm, addr);
if (!pa) {
return false;
}
if (!read_physical_address(pa, buffer, diff)) {
return false;
}
size -= diff;
addr += diff;
buffer += diff;
}
return true;
}