gpt4 book ai didi

linux - 用户进程如何访问我的模块加载的字符设备

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:59 25 4
gpt4 key购买 nike

我正在尝试将系统调用动态加载到内核中(无需重新启动内核并对其进行编译),以尝试(一旦处于内核模式)写入用户进程的内存。

(我知道有一种方法可以使用 ptrace 接口(interface)执行此操作,但它不是一个选项。)

我知道唯一的方法是加载一个模块。为了允许用户与之通信,我被告知使用字符设备(应该在/dev/中,对吧?)。我成功加载了一个。我的问题是我不知道用户进程如何在没有系统调用的情况下访问它。(我被告知使用 ioctl)谁能展示用户进程如何调用 ioctl,例如由我的模块加载的?

谢谢,晒

最佳答案

For the answer below, I have assumed you to be developing a Linux module. Upon rereading your question, I see I could have misinterpreted the problem.


有几种与内核驱动程序通信的机制:

  • /proc 条目(又名 procfs )
  • ioctl 通过设备接口(interface)
  • 直接通过设备接口(interface)

最常见的技术是最后一种技术,它使用 read() 和/或 write() 系统调用来引起驱动程序操作。虽然这些系统调用通常传递纯数据,但没有什么能阻止特定驱动程序传递 metadata。通过输入/输出接口(interface)。

另一方面,如果驱动程序已经有一个有用的纯数据规则,而 read()write() 对元数据来说不是很好,那么 ioctl() 系统调用是一种通用瑞士军刀,用于执行与文件相关的各种操作,例如加载或卸载磁带、弹出 DVD、查找网卡的以太网地址,或查明发生了多少磁盘驱动器错误。已经定义了如此多的 ioctl 操作代码,您可能会找到一个合理的代码来重用您的目的。 ioctl 接口(interface)的一大缺点是它最适合由自定义程序使用,因此通过连接到标准程序流水线。

/proc 接口(interface)结合了前两种技术的优点:它适用于使用标准实用程序的 stdin/stdout 约定, 但它也通过常规驱动机制提供了一个独立于任何 I/O 的设备驱动接口(interface)。例如,在您的 Linux 系统上尝试 cat/proc/net/tcp。它显示所有 TCP 连接的状态。

关于实现 procfs 功能的好文章位于 create_proc_entry() .实现 ioctl 的内容很详细 here .元数据方法与任何其他设备驱动程序一样易于编码,尽管它可能会给有经验的实现者带来概念上的障碍。

关于linux - 用户进程如何访问我的模块加载的字符设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653639/

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