精华内容
下载资源
问答
  • 常见的缓冲对类型有
    千次阅读
    2021-09-24 09:03:52

    一.缓冲区分类:

    1. 按照缓冲区所在内存区域位置分类:

      • 栈溢出

      • 堆溢出

      • 数据段溢出

    2. 按照导致溢出的内存操作函数分类:

      • 字符串操作函数(strcpy)

      • 格式化输出函数(sprintf)

    3. 按照溢出数据修改的关键值分类:

      • 修改返回地址

      • 修改函数指针

      • 修改指针变量

    二.栈溢出

    1. 基于栈溢出的攻击Stack Smashing:

      将函数返回地址指向注入到缓冲区中的恶意代码,当函数执行结束时会跳转到恶意代码处,进而执行代码。

    2. Return-into-Libc溢出攻击:

      不将恶意代码注入到缓冲区中,而是重用已有代码,将系统库函数(如system()exec()等)作为攻击代码。

    3. Off-by-one溢出:

      输入内容恰好超出缓冲区一位数据。

      代码示例:

      void function(char *input)
      {
          char buffer[128];
          for(int i = 0; i <= 128; i++)
              buffer[i] = input[i];
      }

    三.堆溢出

    堆是由程序运行时运用 malloc(⋅)和 free(⋅)等函数动态分配、释放的内存块组成,每一个内存块都包含自身内存大小和指向下一个内存块的指针等信息。虽然堆中没有函数返回地址,但是攻击者可以通过修改堆中的函数指针或者指针变量,进而达到修改程序控制流,执行攻击代码的目的。

    四.数据段溢出

    数据段中存储的是初始化和未初始化的全局/静态变量。

    代码示例:

    static char buffer[128];
    static int(*fptr)(const char *str);
    main(char *str)
    {
        fptr = (int(*)(const char *str));
        strcpy(buffer, str);
        (void)(*fptr)(buffer);
    }

    上述程序中,如果str的长度超过buffer容量就会造成溢出,覆盖函数指针fptr,改变程序的执行流程。

    五.格式化字符串溢出

    格式化字符串溢出[11,22,23]主要由格式化字符函数如 fprintfsprintfsnprintfsyslog 等引起。典型的如函数 sprintf(char * strconst char * format,......)是将格式化的数据写入 str 所指的数组中,并添加‘\0’,如果格式化的数据长度超出了数组的容量就会溢出。

    六.整数溢出

    代码示例:

    void copy(char *str)
    {
        char buffer[80];
        unsigned short len; // 0 <= len <= 65535 
        len = strlen(str); 
        if(len <= 80)
            strcpy(buffer, str);
        do_sth_with(buffer);
    }

    该例子中,参数str被拷贝到长度为80的缓冲区中。虽然程序对缓冲区的写入有边界保护,但当str的长度超过短整型的范围时(也即大于65535),它可能会被截取为一个小于80的值赋值给len(例如str长度为65600时,len的值为64),这样边界保护不再有效。

    七.缓冲区溢出攻击特征

    len:bufflen(input) > len(buffer)输入字符串的长度大于缓冲区所能容纳的最大长度
    con:addrcontains(input, type(address))输入中包含地址类信息
    con:instcontains(input, type(instruction))输入中包含指令信息
    con:ctrlcontains(input, type(ctrlvar))输入中包含关键变量
    mod:raddmodify(retnadd)修改返回地址
    mod:fptrmodify(funcptr)修改函数指针
    mod:cvarmodify(ctrlvar)修改关键变量
    mod:cptrmodify(ctrlptr)修改关键指针
    jmp:stackjumpe(stack)程序执行跳转到栈内存区域
    jmp:hcapjumpe(hcap)程序执行跳转到堆内存区域
    exe:stackexecute(stack)执行存储在栈中的指令
    exe:heapexecute(heap)执行存储在堆中的指令
    flow:ctrlflow(ctrlvar)程序执行路径因为关键变量而改变
    更多相关内容
  • 不可不知的三种缓冲类型

    千次阅读 2019-12-07 21:13:52
    为什么时候写入文件的内容却没有?没什么printf打印在终端的内容看不到?这一切背后有着怎样早为人知的秘密? 今天来说说缓冲的事。也许你已经听说过三种缓冲模式,但是今天要讲的不止这些。 缓冲 为了减少使用...

    ​来源:公众号【编程珠玑】

    作者:守望先生

    原文地址:https://www.yanbinghu.com/2019/12/01/27836.html

    为什么有时候写入文件的内容却没有?没什么printf打印在终端的内容看不到?这一切背后有着怎样早为人知的秘密?

    今天来说说缓冲的事。也许你已经听说过三种缓冲模式,但是今天要讲的不止这些。

    缓冲

    为了减少使用read和write调用的次数,标准IO库提供了缓冲,有人可能会问,为什么要减少它们的调用次数?很明显read和write是系统调用,它们花费的时间将会更多,本文不展开描述,可以参考《库函数和系统调用》。那么有哪三种缓冲类型呢?

    全缓冲

    在全缓冲的情况下,在填满标准I/O缓冲区后,才进行实际的I/O操作。写磁盘文件通常就是全缓冲的。举个例子:

    /*来源:公众号【编程珠玑】
    博客:https://www.yanbinghu.com
    buff.c*/
    #include<stdio.h>
    #include<unistd.h>
    int main(void)
    {
        /*以可读可写的方式打开*/
        FILE *fp = fopen("./test.txt","w+");
        if(NULL == fp)
        {
            perror("open file failed");
            return -1;
        }
        /*写入内容*/
        char buf[] = "wechat:shouwangxiansheng\n";
        fwrite(buf,sizeof(char),sizeof(buf),fp);
        //fflush(fp);
        /*sleep一段时间,以便观察*/
        sleep(20);
        fclose(fp);
        return 0;
    }

    打开一个文件,并向里面写入一段字符串。我们编译并运行:

     

    $ gcc -o buff buff.c
    $ ./buff

    此时观察test.txt:

     

    $ cat test.txt

    发现它的内容是空!明明已经写入了为什么会什么东西都没有?

    原因在于它默认是全缓冲的,因此在将内容写入文件后,并没有直接存在文件中,当程序关闭文件或者程序运行完成退出后,再次查看:

     

    $ cat test.txt
    wechat:shouwangxiansheng

    发现文件已经有了内容。

    除了等待程序运行完成,还可以使用fflush函数,它可以将缓冲区中的内容写入到磁盘中(终端驱动设备表示丢弃缓冲区的数据)。

    所以将fwrite下面一行的注释去掉后,就可以发现,写入之后,就可以直接在文件中看到内容了。

    所以当你在写一个文件,但是查看文件却没有任何写入内容时,不要一直怀疑自己的代码。

    行缓冲

    行缓冲指的是当遇到换行符时,或者缓冲区已经满了(一般1024字节),标准I/O库执行I/O操作。同样举个例子:

     
    /*来源:公众号【编程珠玑】
    博客:https://www.yanbinghu.com
    lineBuff.c*/
    #include<stdio.h>
    #include<unistd.h>
    int main(void)
    {
        printf("wechat:shouwangxiansheng");
        sleep(10);
        return 0;
    }

    编译运行上面的程序:

     

    $ gcc -o lineBuff lineBuff.c
    $ ./lineBuff

    你会发现,printf执行完了之后,内容并没有马上输出到终端,而是在程序运行完之后才输出。

    聪明的你当然也知道,要想打印完后直接输出到终端,只需要改成下面这样就可以了:

     

    printf("wechat:shouwangxiansheng\n");

    不带缓冲

    这个从字面就可以理解其意思了。同样举个例子:

     
    /*来源:公众号【编程珠玑】
    博客:https://www.yanbinghu.com
    noBuff.c*/
    #include<stdio.h>
    #include<unistd.h>
    int main(void)
    {
        fprintf(stderr,"wechat:shouwangxiansheng");
        sleep(10);
        return 0;
    }

    编译运行你就会发现,运行完fprintf语句后,内容直接输出在终端,而不需要等到换行。一般来说,标准错误是不带缓冲的。

    总结

    通过上面的一些例子,我们也发现了这样一些规律:

    • 通常磁盘上的文件是全缓冲区的

    • 标准输入和标准输入通常是行缓冲的

    • 指向终端设备的流通常是行缓冲,而指向文件时,则是全缓冲

    • 为了尽可能显示错误信息,标准错误是不带缓冲的

    当然这还没有完,下一篇将带你踩更多的坑。

     

    相关精彩推荐

    如何让你的程序同时只能运行一个?

    如何优雅地将printf的打印保存在文件中?

    Linux下你还知道这些特殊文件?

    聊点基础的--sizeof,strlen,数组,字符串在一起能整哪些坑?

     

    关注公众号【编程珠玑】,获取更多Linux/C/C++/数据结构与算法/计算机基础/工具等原创技术文章。后台免费获取经典电子书和视频资源

    展开全文
  • 在开始之前我们给出几个基本的定义:缓冲区,简单说来是一块连续的计算机内存区域,可以保存相同数据类型的多个实例.C程序员通常和字缓冲区数组打交道.最常见的是字符数组.数组,与C语言中所有的变量一样,可以被声明为
  • 缓冲区溢出是最常见的一种安全漏洞类型。这种漏洞可使一个匿名的Internet用户机会获得一台主机部分或全部的控制权。若能有效地消除缓冲区溢出的漏洞,网络安全威胁可得到较好的缓解;研究了各种类型缓冲区溢出漏洞...
  • 在过去的十年中,以缓冲区溢出为类型的安全漏洞占是最为常见的一种形式了。更为严重的是,缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户机会获得一台主机的部分或全部的控制...
  • 在分析缓冲区溢出攻击原理的基础上,说明了攻击的成因,然后描述了目前常见的攻击类型,最后给出了现有的防范措施,进而提出了一种新的通过编译器及相关系统级函数进行修改来解决该问题的方案。
  • 缓冲区溢出漏洞浅析

    千次阅读 2019-10-01 17:41:41
    缓冲区是指内存中一段连续的地址空间,用来缓存数据。在大多数开发语言中,把数组和指针分配的空间作为缓冲区。缓冲区溢出是指读取或写入的范围超过数组或指针指向的缓冲区空间,导致程序运行期间发生异常。缓冲区...

     

    缓冲区是指内存中一段连续的地址空间,用来缓存数据。在大多数开发语言中,把数组和指针分配的空间作为缓冲区。缓冲区溢出是指读取或写入的范围超过数组或指针指向的缓冲区空间,导致程序运行期间发生异常。缓冲区溢出大多数情况下编译器无法给出错误信息,而只有当程序运行期间才会暴露出来,所以缓冲区溢出也归属于运行时缺陷。运行期间发生异常是由于缓冲区溢出数据(包括上界和下界),破坏了缓冲区上下边界外其它变量的数据,导致出现异常,由于在程序运行期间,是否超过边界、超过边界时,破坏了边界外的数据,而边界外数据是否发生异常,取决于收到污染的变量值,是否合理,当时是否用于其它程序功能等,所以缓冲区溢出缺陷可能会出现程序异常,也可能短期内不会出现程序异常。

     

         下面是缓冲区溢出原理示意图:

     

     

       缓冲区溢出在不同的编译器和操作系统下,溢出数据破坏栈中位置可能不同。与操作系统是否支持DEP(数据执行保护)有关。

     

       常见的缓冲区溢出缺陷包括:

    1. 写入污染数据导致的越界
    2. 污染数据由于数组下标
    3. 污染数据用于内存分配函数
    4. 污染数据用于指标操作
    5. 污染数据用于拷贝字符串
    6. 污染数据用于格式化字符串
    7. 给数组赋值字符串越界
    8. 数组下标访问越界
    9. 初始化内存越界
    10. 指针操作越界
    11. 字符串拷贝越界
    12. 格式化字符串导致的缓冲区溢出

     

    缓冲区溢出可以使任何一个有黑客技术的人取得机器控制权甚至最高权限。比较著名安全漏洞事件包括2003年8月的冲击波病毒、2014年4月报出的openssl“Heartbleed”(心脏滴血)漏洞,2015年1月的glibc库幽灵漏洞。根据CNNVD2018年12月月报显示,当月采集漏洞1275个,其中缓冲区溢出错误排名第一,一共196个,占比15.37%。在CWE收集的缓冲区溢出漏洞相关的编号包括CWE 119、CWE 120、CWE 121、CWE 122、CWE 129、CWE 134、CWE 193、CWE 787、CWE 788和CWE 805等。

    缓冲区溢出导致安全漏洞是主要是由于开发人员在编写程序中缓冲区使用不当引起的,这种类型有共同的特征,是可以通过源代码静态分析手段检测出来,是完全可以在开发阶段检测出来并进行修复的,这时候修复安全漏洞的成本也是最低的。

    下面我们列举其中的几个包含缓冲区溢出错误的代码。

    1. 写入污染数据导致的越界

    #include <stdio.h>

    #include <stdlib.h>

     

    int main(int argc, char *argv[])

    {

      

       char cArray[10];

       scanf("%s",cArray);

       printf("%s,Hello, welcome you\n",cArray);      

       return 0;

    }

    上面代码中声明了数组aArray,大小为10个字符长度。在代码中通过控制台输入字符串,直接存储到数组,如果输入长度超过10个,则会导致缓冲区溢出。防止出现这种错误可以通过限制输入数据长度避免该漏洞,例如 scanf("%10s",cArray);

      所谓污染数据主要是指来自于输入设备、文件或网络等外部的数据,如果没有对输入数据的长度、类型等进行合法性检测,则会存在着安全漏洞。我们无法不允许用户输入数据,但是我们必须保证输入数据在可控范围之内。

     

    1. 污染数据用于数组下标

    #include <stdio.h>

    #include <stdlib.h>

     

    int main(int argc, char *argv[])

    {

       char cArray[10];

       ind  n=0;

       int  i=0;

     

       for(i=0 ; i<10 ; i++ )

       {

          scanf("%d",@n);

        cArray[n]=1;

       }

    return 0;

    }

    上面代码中声明了字符数组cArray,大小为10,在循环中通过输入一个数字用于数组的下标。如果用户输入0-9之外的数字,则会导致数组越界。防止这种错误产生可以通过对读入的下标值进行判断,是否在0-9范围之内。

    CWE 129属于该类漏洞。我们无法控制用户输入我们想要的数据,但是我们可以通过合法性检验防止不能接受的输入。

    今天放假第一天,做了几道数学题目,感觉现在初中数学题目真很难,还是整理我们的专业技术还简单一些。由于时间关系,其它类型错误例子后续我继续整理,由浅到深逐渐把缓冲区溢出的各种情况列出来。

    关注互联网安全,也不要忘记代码安全。且代码安全,我们可以通过自动化手段实现。代码错误和安全漏洞检测是可以像接口测试一样(赶快摒弃基于GUI的自动化测试吧,为什么大家都搞接口自动化测试),真正能够在企业生产中通过自动化测试工具落地。

    关注安全,关注作者

    展开全文
  • channel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel是一个数据类型,主要用来解决go程的同步问题以及...

    |版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:https://blog.csdn.net/sgsgy5

    channel

    我们先来看一下通道的解释:
    channel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。
    channel是一个数据类型,主要用来解决go程的同步问题以及协程之间数据共享(数据传递)的问题。
    goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是共享内存来通信。
    引用类型 channel可用于多个 goroutine 通讯。其内部实现了同步,确保并发安全。
    这里写图片描述

    定义channel和使用

    和map类似,channel也一个对应make创建的底层数据结构的引用。
    当我们复制一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此调用者和被调用者将引用同一个channel对象。和其它的引用类型一样,channel的零值也是nil。
    定义一个channel时,也需要定义发送到channel的值的类型。channel可以使用内置的make()函数来创建:
    我们先来看一段代码

    package main
    import "fmt"
    func main(){
        ch:=make(chan int) //这里就是创建了一个channel,这是无缓冲管道注意
        go func(){                  //创建子go程
            for i:=0;i<6;i++{
                ch<-i     //循环写入管道
                fmt.Println("写入",i)
            }
        }()
    
        for i:=0;i<6;i++{      //主go程
            num:=<-ch         //循环读出管道
            fmt.Println("读出",num)
        }
    }

    我们先看一下运行结果再来看代码:
    这里写图片描述
    我们在代码中 先创建了一个匿名函数的子go程,和main的主go程一起争夺cpu,但是我们在里面创建了一个管道,无缓冲管道有一个规则那就是必须读写同时操作才会有效果,如果只进行读或者只进行写那么会被阻塞,被暂时停顿等待另外一方的操作,在这里我们定义了一个容量为0的通道,这就是无缓冲通道,如下图
    这里写图片描述
    无缓冲通道就是这样,一次只能传输一个数据
    总结一下就是无缓冲特性:
    同一时刻,同时有 读、写两端把持 channel。
    如果只有读端,没有写端,那么 “读端”阻塞。
    如果只有写端,没有读端,那么 “写端”阻塞。
    读channel: <- channel
    写channel: channel <- 数据

    有缓冲channel

    如图所示:
    这里写图片描述
    . 在第 1 步,右侧的 goroutine 正在从通道接收一个值。
    在第 2 步,右侧的这个 goroutine独立完成了接收值的动作,而左侧的 goroutine 正在发送一个新值到通道里。
    在第 3 步,左侧的goroutine 还在向通道发送新值,而右侧的 goroutine 正在从通道接收另外一个值。这个步骤里的两个操作既不是同步的,也不会互相阻塞。
    最后,在第 4 步,所有的发送和接收都完成,而通道里还有几个值,也有一些空间可以存更多的值。
    有缓冲通道就是图中所示,一方可以写入很多数据,不用等对方的操作,而另外一方也可以直接拿出数据,不需要等对方写,但是注意一点(如果写入的一方把channel写满了,那么如果要继续写就要等对方取数据后才能继续写入,这也是一种阻塞,读出数据也是一样,如果里面没有数据则不能取,就要等对方写入),而有缓冲channel定义也比较简单

    ch:=make(chan int,10)//chan int 只能写入读入int类型的数据,10代表容量为10.

    这里用了自动推导类型来声明了一个有缓冲的channel
    总结起来就是:
    channel 中自带缓冲区。创建时可以指定缓冲区的大小。
    w:直到缓冲区被填满后,写端才会阻塞。
    r:缓冲区被读空,读端才会阻塞。
    len:代表缓冲区中,剩余元素个数,
    cap:代表缓冲区的容量。
    在这里可以举个小小的例子来解释一下有缓冲channel和无缓冲channel
    同步通信: 数据发送端,和数据接收端,必须同时在线。 —— 无缓冲channel
    打电话。打电话只有等对方接收才会通,要不然只能阻塞

    异步通信:数据发送端,发送完数据,立即返回。数据接收端有可能立即读取,也可能延迟处理。 —— 有缓冲channel 不用等对方接受,只需发送过去就行
    发信息。短信。
    是不是很形象呢
    下一节将讲解一下channel常见的陷阱以及关闭channel

    展开全文
  • 常见的网络攻击类型

    万次阅读 2019-02-20 12:23:46
    常见的网络攻击类型 一、拒绝服务攻击 1.拒绝服务攻击 Dos(Denial of Service)是一种利用合理的服务请求占用过多的服务资源,从而使合法用户无法得到服务响应的网络攻击行为。 被DOS攻击时的现象大致: 被...
  • 常见软件测试类型分类

    万次阅读 2018-09-20 09:48:05
    软件测试类型 1)回归测试 回归测试: (regression testing): 回归测试两类:用例回归和错误回归;用例回归是过一段时间以后再回头以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新...
  • 【Java基础-3】吃透Java IO:字节流、字符流、缓冲

    万次阅读 多人点赞 2020-09-23 20:12:33
    什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。
  • java中常见类型的转换以及方法总结

    千次阅读 多人点赞 2022-03-26 13:19:18
    1.char和String之间的转换 ...char是基本数据类型,而String是个类,属于引用数据类型。String类可以调用方法,具有面向对象的特征 1.2 String转换为char类型 在Java中将String转换为char是非常简单的。 使
  • STM32进阶之串口环形缓冲区实现

    千次阅读 多人点赞 2019-10-15 22:34:52
    文章目录队列的概念队列的特点队列的常见两种形式普通队列环形队列从队列到串口缓冲区的实现定义一个结构体:初始化写入环形缓冲区的代码实现:读取缓冲区的数据的代码实现:测试效果补充喜欢就关注我吧!...
  • 协议缓冲

    千次阅读 2022-04-28 17:46:56
    目录1,概述2,作用3,优势4,跨语言兼容性5,前后兼容6,不适合的情况7,工作过程8,字段类型9,额外的数据类型支持 1,概述 协议缓冲区提供了一种...协议缓冲区为大小高达几兆字节的类型化结构化数据包提供了一种序
  • 什么是缓冲区溢出?什么危害?原因是什么?

    万次阅读 多人点赞 2018-09-22 09:03:48
    缓冲区溢出是指当计算机向缓冲区填充数据时超出了缓冲区本身的容量,溢出的数据覆盖在合法数据上。    危害以下两点:  1、程序崩溃,导致拒绝服务  2、跳转并且执行一段恶意代码  原因:造成缓冲区溢出...
  • 对缓冲区的理解

    千次阅读 多人点赞 2019-01-31 09:43:21
    一、什么是缓冲缓冲区(buffer),它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的。 缓冲...
  • 多图详解缓冲区溢出问题

    万次阅读 多人点赞 2020-11-18 23:43:21
    缓冲区溢出一个常见的后果是:黑客利用函数调用过程中程序的返回地址,将存放这块地址的指针精准指向计算机中存放攻击代码的位置,造成程序异常中止。为了防止发生严重的后果,计算机会采用栈随机化,利用金丝雀值...
  • 环形缓冲区的实现

    千次阅读 2019-05-18 20:55:37
    :防止指针越界非法访问,程序说明,需要使用者整个缓冲区的大小进行把握。 那么在串口接收函数中: 1void USART1_IRQHandler(void) 2{3 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断4 {5...
  • gui 中的显示功能 gui 中的显示最终通过调用...与 gui 而言,所有的在调用 lcd 驱动刷新 framebuffer 到屏幕上显示之前都是通过 framebuffer 的操作完成。这里提及的操作主要使用 memcpy、memset 来完成,这也...
  • OpenGL之帧缓冲

    千次阅读 2019-04-17 13:37:02
    文章目录概要帧缓冲附件函数纹理附件渲染缓冲对象附件附件类型的选择后处理离屏渲染离屏渲染与双缓冲来源 概要 所谓帧缓冲是做什么用的,就是用来存储渲染数据的地方,可以理解为显存。几何数据(顶点坐标、纹理坐标...
  • 浅析缓冲区溢出

    千次阅读 2018-08-14 11:34:35
    所以研究透彻还需要不少的时间,这里简单的做一个学习的总结,通过具体的实验案例对缓冲区溢出进行简要的解析。 汇编语言及编程语言是基础,其次是反编译工具的使用:比如gdb、IDA pro、objdump等。汇编语言的...
  • 关于缓冲区溢出

    千次阅读 2018-09-23 10:28:13
     当 David LeBlanc 和我确定《Writing Secure Code》一书的目录时,我们明确地意识到必须着重介绍缓冲区溢出问题,因为已经太多的开发人员在编写代码时犯了太多的此类错误,这些错误导致了可被人利用的缓冲区溢出...
  • Coverity能够查找到的缺陷类型 C/C++程序代码审查单 栈缓冲区溢出和堆缓冲区溢出 资源泄露 代码检查
  • Java提高篇 —— String缓冲

    千次阅读 2018-08-15 18:48:16
    一、String缓冲池    首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象。查看源码就会发现String类为final型的(当然也不可被继承),而且通过查看JDK文档会发现几乎每一个修改...
  • 锁存器(latch)---脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生...
  • 一、缓冲区概念: 缓冲区到底是个啥,看ARCGIS的说明就行: 缓冲区: https://desktop.arcgis.com/zh-cn/arcmap/latest/tools/analysis-toolbox/buffer.htm 缓冲区(分析)的工作原理: ...arcgis的...
  • } 其中:pos为int类型,可能为负数,这会导致在数组所引用的内存边界之外进行写入,可以将pos类型改为size_t避免 4)空字符错误 //错误 char array[]={'0','1','2','3','4','5','6','7','8'}; //正确的写法应为: ...
  • C++ 队列与缓冲

    千次阅读 2019-06-13 10:00:48
    阻塞式消息队列、消息数据缓冲区、环形缓冲区、在自定义应用层协议中的应用..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,079
精华内容 65,231
热门标签
关键字:

常见的缓冲对类型有