gpt4 book ai didi

自定义系统调用可以访问另一个进程的内存吗?

转载 作者:行者123 更新时间:2023-12-05 03:56:50 25 4
gpt4 key购买 nike

出于教育目的,我设法 create a custom syscall只是在内核日志中打印一条消息。

我现在想的是创建一个“跨进程 memcpy”系统调用,它接收另一个进程的 PID、该进程内存空间的内存地址、长度和当前进程内存空间中的指针,并将内存从另一个进程复制到当前进程。

我的想法是编写一个程序,向用户询问一个字符串,然后打印它的 PID、存储该字符串的变量地址及其长度。然后我会编写另一个进程来请求 PID、地址和长度,并使用我的自定义系统调用将该信息从另一个进程复制到这个进程。

理论上,我知道内核应该能够访问一切,包括其他进程内存。但实际上我发现有 copy_from_usercopy_to_user函数在用户空间和内核空间之间复制内存,但它们不接收 PID 或任何其他进程标识符。因此,系统调用似乎以某种方式关于调用者进程的上下文信息——我不知道是否有任何限制或 API 阻止/允许从系统调用访问另一个进程的内存空间。

Linux 内核是否有任何 API 来访问另一个进程的内存,给定它的 PID 和内存地址?

最佳答案

Does the Linux kernel have any API to access another process' memory, given it's PID and memory address?

是的,get_user_pages .

请注意,其他进程未映射到调用者的地址空间。 get_user_pages获取底层页面。

我们可以使用get_user_pages在涵盖要读取或写入的请求区域的一系列页面上获得引用。然后小心地将数据复制到这些页面和从这些页面中复制出来,以便我们只接触请求的区域。

/proc/<pid>/mem机制可能基于 get_user_pages ;无论如何,值得一看,看看它是如何工作的。

另请参阅 ptrace系统调用及其PTRACE_PEEKDATAPTRACE_POKEDATA操作。您可以使用 ptrace 解决您的问题或者从它的实现中抄袭一些东西。

引入系统调用来访问内存可能不是一个好主意。您必须确保它是安全编码的,并且它会检查调用者的凭据,否则您可能会打开一个巨大的安全漏洞。

关于自定义系统调用可以访问另一个进程的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com