Rust 从 0 到 1 (泛型和特征、集合类型)
Rust 从 0 到 1 (泛型和特征、集合类型)泛型在我们的编程生涯中,经常遇到同一功能的函数处理不同的类型数据,如整合的加法、浮点数的加法等,在不支持泛型的语言中你需要:
123456789fn add_i8(a:i8, b:i8) -> i8 { a + b}fn add_i32(a:i32, b:i32) -> i32 { a + b}fn add_f64(a:f64, b:f64) -> f64 { a + b}
在编程的时候,我们经常利用多态。通俗的讲,多态就是好比坦克的炮管,既可以发射普通弹药,也可以发射制导炮弹(导弹),也可以发射贫铀穿甲弹,甚至发射子母弹,没有必要为每一种炮弹都在坦克上分别安装一个专用炮管,即使生产商愿意,炮手也不愿意,累死人啊。所以在编程开发中,我们也需要这样“通用的炮管”,这个“通用的炮管”就是多态。
因此呢,泛型就是一种多态。泛型主要是为了减少代码量,避免程序臃肿,同时也可以丰富语言本身的表达能力。在 Rust 中泛型的声明如下:
123fn a ...
Rust 从 0 到 1 (流程控制,匹配模式,方法)
Rust 从 0 到 1 (流程控制,匹配模式,方法)流程控制在所有的编程语言都有 if else 流程控制语句,如果没有请告诉我!
if elseRust 中的 if else 语法如下:
123456let condition = true;if condition { // run A} else { // run B}
读作:若 condition 的值为 true,则执行 A 代码,否则执行 B 代码。
在 Rust 中 if else 还有一种用法是:
12345678let condition = true; let number = if condition { 5 } else { 6 }; println!("The value of number is: {}", number);
这里的代码解释为:如果 condition 为真,那么 number 的值为 5 否做为 6。这种用法 ...
记录最近遇到的两个设备漏洞
记录最近遇到的两个设备漏洞最近在做应急的时候遇到的两个漏洞,一个华硕路由器的 CVE-2023-39238,最开始由国外的安全研究员公开的详情,但是是个后台漏洞没啥用,在华硕路由器的后台提供了执行命令的方式,因此这个漏洞并没有什么用;另外一个是 Zyxel VPN 防火墙的未授权 RCE,只影响 VPN50, VPN100, VPN300, VPN500, VPN1000 这几个路由器,但是影响范围还是挺大的。
0x01 CVE-2023-39238该漏洞主要影响
华硕 RT-AX55:3.0.0.4.386_51948 或更高版本
华硕 RT-AX56U_V2:3.0.0.4.386_51948 或更高版本
华硕 RT-AC86U:3.0.0.4.386_51915 或更高版本
众所周知,华硕路由器在启动时需要从 nvram 中读取一些部分环境,因此模拟启动重点放在这部分。好在一些大佬写好了工具,如 https://github.com/firmadyne/libnvram、https://github.com/zcutlip/nvram-faker。还有专门针对华硕路由器的编译 ...
Rust 从 0 到 1(所有权和借用,复合类型)
Rust 从 0 到 1 学习记录(二)所有权和借用
在以往,内存安全几乎都是通过 GC 的方式实现,但是 GC 会引来性能、内存占用以及 Stop the world 等问题,在高性能场景和系统编程上是不可接受的,因此 Rust 采用了与众不同的方式:所有权系统。
在程序运行时,都需要和计算机内存打交道,如何申请,如何释放不用的空间。在计算机语言不断演变的过程中,出现了三种流派:
垃圾回收机制(GC),在程序运行的过程中不断的寻找不再使用的内存,如:Go,Python,Java
手动管理内存的分配和释放:在程序中,通过函数调用的方式来申请和释放内存,如:C++
通过所有权来管理内存,编译器在编译时会根据一系列规则检查
Rust 选了所有权来管理内存,这种检查在编译期就完成了,对运行的程序不会造成任何性能的损失。
栈与堆栈栈中的所有数据都必须占用已知且固定大小的内存空间。栈中的数据遵循先进后出的原则,增加数据叫进栈,移除数据叫出栈。
堆与栈不同,对于大小未知或者可能变化的数据,我们需要将它存储在堆上。堆是一种缺乏组织的数据结构,因此可能带来隐藏的安全问题。
当向堆上放入数据时, ...
Rust 从 0 到 1 (环境搭建,基础类型)
Rust 从 0 到 1 学习记录(一)0x01 Rust 简介
Rust 最早是 Mozilla 雇员 Graydon Hoare 的个人项目。从 2009 年开始,得到了 Mozilla 研究院的资助,2010 年项目对外公布,2010 ~ 2011 年间实现自举。自此以后,Rust 在部分重构 -> 崩溃的边缘反复横跳(历程极其艰辛),终于,在 2015 年 5 月 15 日发布 1.0 版。
Rust 是一种快速、高并发、安全且具有授权性的编程语言。
Rust 的优势:
与 Go 相比,Rust 表达能力更强,性能更高,线程更安全,包管理更好
与 C++ 相比,性能旗鼓相当,Rust 安全性更好
与 Java 相比,Rust 性能全面领先,占用内存更小
与 Python 相比,性能肯定没得说,对环境要求低,(Python 在安装依赖时总会出现各种各样的坑
没有 GC(垃圾回收机制),所以是安全度极高的语言
0x02 环境搭建基本环境:
macOs
Golang IDE
Golang IDE Plugins Rust(目前已经停止维护,可以使用 RustRover ...
从 0 开始学习 VxWorks
从 0 开始学习 VxWorks在开始之前,让我们来回顾一下什么是实时操作系统,什么是分时操作系统。
实时操作系统(RTOS)是一种专门设计用于满足实时应用程序需求的操作系统。实时应用程序对任务的响应时间要求非常高,必须在严格的时间限制内完成。
分时操作系统是一种多任务处理系统,它通过在多个任务之间切换执行,为每个任务分配时间片。分时系统的目标是在多个任务之间共享处理器时间,以提高系统的整体吞吐量和资源利用率。
两者的主要区别包括:
响应时间要求:
实时操作系统: 具有对任务响应时间的硬实时要求,即任务必须在预定的时间内完成。
分时操作系统: 没有硬实时要求,任务的完成时间可以相对灵活,系统主要关注提高整体效率。
任务切换机制:
实时操作系统: 任务切换是由于时间限制而严格控制的,以确保在规定的时间内完成任务。
分时操作系统: 任务切换是基于时间片轮转或优先级调度等策略,以确保公平分配处理器时间。
应用领域:
实时操作系统: 通常用于需要满足严格时间限制的应用领域,如航空航天系统、医疗设备、工业自动化等。
分时操作系统: 通常用于一般计算机系统,如个人计算机、服务器等,其中任 ...
GeoServer SQL 注入漏洞分析(CVE-2023-25157)
GeoServer SQL 注入漏洞分析(CVE-2023-25157)0x01 GeoServer & GeoToolsGeoServer 是一个用 Java 编写的开源软件服务器,允许用户共享和编辑地理空间数据,GeoServer 基于 Spring 开发,使用到了 GeoTools 库。
GeoTools 是一个开源的 Java 库,提供对地理数据空间工具,GeoServer 许多核心功能使用 GeoTools 实现,如:数据读写转换。
0x02 漏洞介绍GeoServer 和 GeoTools 发布了 CVE-2023-25157 和 CVE-2023-25158,OGC 查询存在 SQL 注入漏洞。GeoServer 支持 OGC 过滤器表达式语言和 OGC 通用查询语言 (CQL),主要影响 Web 要素服务 (WFS) 、Web 地图服务 (WMS) 和 用于 ImageMosaic 覆盖的 Web 覆盖服务 (WCS) 协议,已知:
PropertyIsLike 与带有字符串字段的任何数据库一起使用时,或者与启用了编码功能的 PostGIS 数据存储一起 ...