草庐IT

c - 利用缓冲区溢出

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我正在从事一个项目,我应该在其中编写一个C程序来利用给定程序的漏洞。这是易受攻击的C程序:#include#includeintbof(char*str){charbuffer[12];strcpy(buffer,str);return1;}intmain(intargc,char**argv){charstr[517];FILE*badfile;badfile=fopen("badfile",

linux - mmap:在用户空间中映射一个用 kmalloc 分配的内核缓冲区

在用户空间进程中映射使用kmalloc分配的缓冲区的正确方法是什么?也许我还不了解内存映射......我写了一个内核模块来分配这个缓冲区(例如120字节),我会在用户空间进程中读写它。显然我创建了一个字符设备并实现了一个mmapfile_operations中的方法结构。我的方法是:staticintmy_mmap(structfile*filp,structvm_area_struct*vma){//printk(KERN_INFO"Allocatedvirtualmemorylength=%d",vma->vm_end-vma->vm_start);longunsignedints

linux - mmap:在用户空间中映射一个用 kmalloc 分配的内核缓冲区

在用户空间进程中映射使用kmalloc分配的缓冲区的正确方法是什么?也许我还不了解内存映射......我写了一个内核模块来分配这个缓冲区(例如120字节),我会在用户空间进程中读写它。显然我创建了一个字符设备并实现了一个mmapfile_operations中的方法结构。我的方法是:staticintmy_mmap(structfile*filp,structvm_area_struct*vma){//printk(KERN_INFO"Allocatedvirtualmemorylength=%d",vma->vm_end-vma->vm_start);longunsignedints

c - 将 DMA 缓冲区映射到用户空间

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。关闭6年前。Improvethisquestion我正在linux-2.6.26上编写设备驱动程序。我想将一个dma缓冲区映射到用户空间,以便将数据从驱动程序发送到用户空间应用程序。请推荐一些好的教程。谢谢

c - 将 DMA 缓冲区映射到用户空间

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答它。关闭6年前。Improvethisquestion我正在linux-2.6.26上编写设备驱动程序。我想将一个dma缓冲区映射到用户空间,以便将数据从驱动程序发送到用户空间应用程序。请推荐一些好的教程。谢谢

linux - 如何将 Linux 内核缓冲区映射到用户空间?

假设缓冲区是使用基于页面的方案分配的。实现mmap的一种方法是使用remap_pfn_range,但LDD3表示这不适用于传统内存。看来我们可以通过使用SetPageReserved标记保留页面来解决这个问题,这样它就被锁定在内存中。但是不是所有内核内存都已经不可交换,即已经保留了吗?为什么需要显式设置保留位?这是否与从HIGH_MEM分配的页面有关? 最佳答案 在mmap方法中从内核映射一组页面的最简单方法是使用故障处理程序来映射页面。基本上你最终会得到类似的东西:staticintmy_mmap(structfile*filp,

linux - 如何将 Linux 内核缓冲区映射到用户空间?

假设缓冲区是使用基于页面的方案分配的。实现mmap的一种方法是使用remap_pfn_range,但LDD3表示这不适用于传统内存。看来我们可以通过使用SetPageReserved标记保留页面来解决这个问题,这样它就被锁定在内存中。但是不是所有内核内存都已经不可交换,即已经保留了吗?为什么需要显式设置保留位?这是否与从HIGH_MEM分配的页面有关? 最佳答案 在mmap方法中从内核映射一组页面的最简单方法是使用故障处理程序来映射页面。基本上你最终会得到类似的东西:staticintmy_mmap(structfile*filp,

c - 'write' 函数的正确缓冲区大小是多少?

我在我的代码(Linux上的C语言)中使用低级I/O函数“write”将一些数据写入磁盘。首先,我将数据累积在内存缓冲区中,然后在缓冲区已满时使用“write”将数据写入磁盘。那么“写入”的最佳缓冲区大小是多少?根据我的测试,并不是越大越快,所以我来这里寻找答案。 最佳答案 写入文件系统block大小的倍数可能有一些优势,特别是如果您正在就地更新文件。如果您向文件写入的内容少于部分block,则操作系统必须读取旧block,合并新内容,然后将其写出。如果您按顺序快速写入小块,则不一定会发生这种情况,因为更新将在稍后刷新的内存缓冲区上

c - 'write' 函数的正确缓冲区大小是多少?

我在我的代码(Linux上的C语言)中使用低级I/O函数“write”将一些数据写入磁盘。首先,我将数据累积在内存缓冲区中,然后在缓冲区已满时使用“write”将数据写入磁盘。那么“写入”的最佳缓冲区大小是多少?根据我的测试,并不是越大越快,所以我来这里寻找答案。 最佳答案 写入文件系统block大小的倍数可能有一些优势,特别是如果您正在就地更新文件。如果您向文件写入的内容少于部分block,则操作系统必须读取旧block,合并新内容,然后将其写出。如果您按顺序快速写入小块,则不一定会发生这种情况,因为更新将在稍后刷新的内存缓冲区上

linux - 在 Linux 中运行时指定 UDP 接收缓冲区大小

在Linux中,可以使用以下命令指定系统默认的网络数据包接收缓冲区大小,例如UDP:sysctl-wnet.core.rmem_max=sysctl-wnet.core.rmem_default=但我想知道,应用程序(例如,在c中)是否可以通过在运行时指定每个UDP套接字的接收缓冲区大小来覆盖系统的默认设置? 最佳答案 您可以增加默认值,但不能增加到超过最大值。使用setsockopt更改SO_RCVBUF选项:intn=1024*1024;if(setsockopt(socket,SOL_SOCKET,SO_RCVBUF,&n,s