2022-2023-1 20221318 《计算机基础和程序设计》第十三周学习总结

作业信息
这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13
作业目标 学习《C语言程序设计》第12章
作业正文 https://www.cnblogs.com/ni-yidan/p/16913050.html

教材学习内容总结
在《C语言程序设计》第十章“字符串”中,
* 字符串常量————一串以'\0'结尾的字符在C语言中被看作字符串,用双引号括起的一串字符是字符串常量,C语言自动为其添加'\0'结束符
* 字符串的储存————C语言没有提供专门的字符串数据类型,使用字符数组和字符指针来处理字符串。
1.字符数组的初始化

* 字符指针————字符指针就是指向字符串首地址的指针

pStr是一个指向常量存储区中的字符串的指针变量,而字符串保存在只读的常量存储区,可修改pStr的值(指向),但不可以对它所指向的存储单元进行写操作.

数组名str的值不可修改,是地址常量,而数组中存储的字符可以被修改。例如,str[0] = 'W';
* 字符串的访问和输入/输出
1.按字符逐个输入/输出
2.按字符串整体输入/输出
gets(str);
puts(str);
注:getchar(); /* 读走输入缓冲区中的回车符 */
* 字符串处理函数

strlen(字符串); ————计算字符串长度(不包括\0的实际字符的个数)
strcpy(目的字符串, 源字符串); ————字符串复制(例如,strcpy(str2, str1); 注意复制的方向!str2必须足够大!)
strcat(目的字符串, 源字符串); ————字符串连接(例如,strcat(str2, str1); str2必须足够大!)
strcmp(字符串1, 字符串2); ——————字符串比较(字符串不能用>,<,==比较大小,if (strcmp(str2, str1) == 0))————当出现第一对不相等的字符时,就由这两个字符决定所在字符串的大小,返回其ASCII码比较的结果值
* 向函数传递字符串————既可用字符数组作函数参数,也可用字符指针作函数参数。


从函数返回字符指针

教材学习中的问题
我对缓冲区溢出攻击并不是很了解,在网上查询了相关资料后得知其相关原理:


通过缓冲区溢出,覆盖返回地址。返回地址跳转到我们栈中恶意代码。这样便完成了缓冲区溢出攻击。
在查找资料,有一下几种实现的方法,首先应关闭防护机制:
1.内存地址随机化机制
0 - 表示关闭进程地址空间随机化。
1 - 表示将mmap的基址,stack和vdso页面随机化。
2 - 表示在1的基础上增加栈(heap)的随机化。
sudo sysctl -w kernel.randomize_va_space=0
2.CANNARY(栈保护)
canary是一种用来防护栈溢出的保护机制。其原理是在一个函数的入口处,先从fs/gs寄存器中取出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是 否和存进去的值一致
gcc -o test test.c // 默认情况下,不开启Canary保护
gcc -fno-stack-protector -o test test.c //禁用栈保护
gcc -fstack-protector -o test test.c //启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码
gcc -fstack-protector-all -o test test.c //启用堆栈保护,为所有函数插入保护代码
3.NX(DEP)
NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。
gcc -o test test.c // 默认情况下,开启NX保护
gcc -z execstack -o test test.c // 禁用NX保护
gcc -z noexecstack -o test test.c // 开启NX保护

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 0/0 3/3 20/20
第二周 105/105 2/5 20/40
第三周 150/255 2/7 20/60
第四周 210/465 2/9 20/80
第五周 280/745 2/11 20/100
第六周 320/1065 1/12 20/120
第七周 400/1465 1/13 20/140
第八周 400/1865 1/14 20/160
第九周 400/2265 1/15 20/180
第十周 400/2665 1/16 20/200
第十一周 400/3065 1/17 20/220
第十二周 360/3425 1/17 20/240
第十三周 360/3785 1/18 20/260
posted @ 2022-11-25 23:29  倪怡丹  阅读(39)  评论(0编辑  收藏  举报