Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 在linux内核中更改用户进程的页面映射_Memory_Linux Kernel_Kernel_Virtual Memory_Faults - Fatal编程技术网

Memory 在linux内核中更改用户进程的页面映射

Memory 在linux内核中更改用户进程的页面映射,memory,linux-kernel,kernel,virtual-memory,faults,Memory,Linux Kernel,Kernel,Virtual Memory,Faults,假设我可以访问一个进程及其mm_结构,有没有一种方法可以更改其中一个映射,或者删除一个映射并创建一个临时映射,这样我就可以分配一个小于一个页面的量并写入内存 例如,处理ADD指令上的写入错误。我可以相对容易地得到故障的地址和大小。我在本地分配8个字节(最大的单指令大小)并处理映射,以便出现故障的虚拟地址指向这8个字节中的第一个字节。然后单步执行指令,获取用于另一页的数据,然后将原始页还原回映射。我只是好奇,在虚拟内存区域中是否可以使用页面以外的内容进行进程。计算机的底层架构定义了虚拟内存的功能和

假设我可以访问一个进程及其mm_结构,有没有一种方法可以更改其中一个映射,或者删除一个映射并创建一个临时映射,这样我就可以分配一个小于一个页面的量并写入内存


例如,处理ADD指令上的写入错误。我可以相对容易地得到故障的地址和大小。我在本地分配8个字节(最大的单指令大小)并处理映射,以便出现故障的虚拟地址指向这8个字节中的第一个字节。然后单步执行指令,获取用于另一页的数据,然后将原始页还原回映射。我只是好奇,在虚拟内存区域中是否可以使用页面以外的内容进行进程。

计算机的底层架构定义了虚拟内存的功能和功能。您还没有指定您的体系结构,但我很有信心,它不允许您管理任何小于页面的单元


但是为了解决一个更大的问题,为什么内存大小很重要?您需要为每个线程分配一次,只有在它有故障时才需要,并且它将被分配给单个用户空间指令。只需使用一个新的、干净的页面临时映射到您的流程中,即可获得写入的值。它可能更容易编写,并且具有更好的安全性:它将避免将内核数据暴露给不受信任(显然是有故障的)应用程序。

这是事实,因为内存开销不是很大,因为页面大小只有4或8k,即使最多只使用前8个字节。作为旁注,您是否知道单步执行用户空间指令的最简单方法(显然是从内核空间)?@Jesus:我不知道确切的方法,但我首先要看一下用于实现
PTRACE\u SINGLESTEP
请求的代码。