C:读取filp->;内核模块中filepointer的私有_数据

C:读取filp->;内核模块中filepointer的私有_数据,c,kernel-module,file-pointer,C,Kernel Module,File Pointer,我想知道是否有可能读取文件指针的私有数据? 还是真的是“私人” 我在一个内核模块中 struct file *intercepted_fp; intercepted_fp = filp_open("/dev/snd/pcmC0D0p_bak", O_RDWR, (S_IRWXU | S_IRWXG | S_IRWXO)); if (intercepted_fp == NULL) { LOGI("Cannot open intercepted device!"); return

我想知道是否有可能读取文件指针的私有数据? 还是真的是“私人”

我在一个内核模块中

struct file *intercepted_fp;

intercepted_fp = filp_open("/dev/snd/pcmC0D0p_bak", O_RDWR, (S_IRWXU | S_IRWXG | S_IRWXO));

if (intercepted_fp == NULL) {
    LOGI("Cannot open intercepted device!");
    return -ENODEV;
}

mm_segment_t old_fs = get_fs();
set_fs(get_ds());

LOGI("private data: %p", intercepted_fp->private_data); // -> prints "private data: ffffffff"
LOGI("buffer: %d", ((struct snd_pcm_file*) intercepted_fp->private_data)->substream->runtime->buffer_size); // ->  Unable to handle kernel paging request at virtual address ffffffff
set_fs(old_fs);

你当然可以。它只是结构文件中的一个字段


它旨在通过文件系统接口传递只有特定设备驱动程序才知道的数据。

专用数据指针是模块跨系统调用保存状态信息的有用资源。在调用驱动程序的open方法之前,open系统调用将该指针设置为NULL。内核模块代码需要分配内存并释放内存。 因此内存是在内核空间中分配的——不是很容易从用户空间访问,而是很容易从内核空间访问您可以访问它,但更改它会干扰驱动程序的运行。您可以在一本好书中找到