zoukankan      html  css  js  c++  java
  • C语言漏洞基础(一)

    0x0001未初始化数组在VS中

    Visual Studio中,未初始化的栈空间用0xCC填充,而未初始化的堆空间用0xCD填充。 而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 如果一个字符串没有结束符'',输出时就会打印出未初始化的栈或堆空间的内容,这就是大名鼎鼎的“烫烫烫”、“屯屯屯”乱码。

    nuo@ubuntu:~$ cat vun.c
    #include<stdio.h>
    #include<string.h>
    int main()
    
    {
    char x[4];  //未初始化数组
    puts(x);
    return 0;
    }
    

    扩展

    int foo()
      {  return 123;
      }
    

    0x00002scanf

    假设有char[40],int num(有符号整数)
    scanf("%s", buf)   //不会检测输入的长度,从而存在漏洞可以利用,比如可以多入输一些,覆盖目的量
    scanf("%39s", buf) //只有39个,最后在40位补个NULL或说'',这样的写法更为安全 40=40
    scanf("%40s", buf)//乍一看,没什么问题,可实际上是第41位补了NULL作为结束符,一字节溢出,可以被利用(虽然只有一个字节)
    
  • 相关阅读:
    C++常变量
    C++变量(C++变量定义、变量赋值、命名规则)
    463. Island Perimeter
    500. Keyboard Row
    811. Subdomain Visit Count
    901. Online Stock Span
    419. Battleships in a Board
    620. Not Boring Movies
    893. Groups of Special-Equivalent Strings
    575. Distribute Candies
  • 原文地址:https://www.cnblogs.com/zuoanfengxi/p/12452429.html
Copyright © 2011-2022 走看看