繁体   English   中英

我在哪里可以找到mmap的源代码?

[英]Where can I find the source code for mmap?

内核2.6.24.6

我正在写一个系统调用插入器。 我想插入mmap,但是需要将代码复制并粘贴到实际的系统调用中。 我找不到要粘贴的代码? 这件事在哪里?

谢谢

mmap(2) C函数正在进行系统调用 您可能会发现MUSL Libc代码更易于在其mmap.c文件中读取,该文件包装了系统调用(可能使用mmap2 )。 系统调用的实际处理是在内核中完成的。

Linux程序集Howto解释了系统调用是如何实际完成的。 另请参阅x86-64 ABI规范

由于内核实际上无法在程序中提供函数,因此对应用程序VDSO的调用将包含在您正在使用的libc实现中。 最有可能的是,你正在使用GNU libc,你可以在这里找到源代码。

您可以下载内核源代码并查看(内核源代码)/drivers/char/mem.c

在那里你可以找到一个简单的mmap实现原型:

static int mmap_mem(struct file *file, struct vm_area_struct *vma)

在某些时候,mmap()应该调用remap_pfn_range()来将内核内存重新映射到用户空间。

我认为这是驱动程序的最简单的mmap()实现,但您也可以查看其他驱动程序代码以了解它们的mmap()实现。 您应该在驱动程序代码中查找以下结构:

static const struct file_operations mem_fops = {
    .llseek     = memory_lseek,
    .read       = read_mem,
    .write      = write_mem,
    .mmap       = mmap_mem,         // Function implementing mmap
    .open       = open_mem,
    .get_unmapped_area = get_unmapped_area_mem,
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM