sbpf 的 interpreter.rs 解读(已完结)
本文为阅读 sbpf 的 interpreter.rs(Rust 语言) 的代码理解笔记。 sbpf 的 interpreter.rs 解读 编译器属性1#![allow(clippy::arithmetic_side_effects)] 这是一个 crate 级属性(注意 #! 表示应用于整个 crate),用于: 禁用 clippy 的算术副作用检查:clippy 通常警告可能溢出或异常的算术操作 在特定场景下需要:eBPF 解释器中很多算术操作使用 wrapping_* 方法,明确允许溢出行为 出于性能考虑:避免额外的检查开销 版权声明、许可证声明12345678910// Derived from uBPF <https://github.com/iovisor/ubpf>// Copyright 2015 Big Switch Networks, Inc// (uBPF: VM architecture, parts of the interpreter, originally in C)// Copyright 2016 6WIND S.A...
Rust 宏编程笔记(已完结)
本文为阅读《Rust圣经》的宏编程内容笔记。宏在Rust中的地位非常高,故用单独一篇文章记录笔记。查看《Rust圣经》原书请搜索“Rust圣经”或点击此链接:[Rust语言圣经(Rust Course)](https://course.rs/about-book.html) 宏的定义Rust 的宏(Macro)是一种元编程工具,允许在编译时生成或转换代码。它们能减少重复、创建领域特定语言(DSL),并提供更强的表达能力。 宏的调用格式12345fn main() { println!("aaaa"); println!["aaaa"]; println!{"aaaa"}} 宏与函数调用时最大的区别就是:它在调用时多了一个 ! ,而宏后面跟的括号可以是 () [] {} ,Rust 内置宏都有自己约定俗成的使用方式,例如:vec![...] 、assert_eq!(...) 宏的分类在 Rust 中宏分为两大类:声明式宏(declarativ...
Rust 基础入门(四)(更新中)
本文为阅读《Rust圣经》的第一篇笔记,内容包括《Rust基础入门》最后4章节(11~14),建议先看完本网站文章《Rust基础入门(一)/(二)/(三)》等,如果想查看原书请搜索“Rust圣经”或点击此链接:[Rust语言圣经(Rust Course)](https://course.rs/about-book.html) 包和模块Rust 的组织管理 项目(Package):一个 Cargo 提供的 feature ,可以用来构建、测试和分享包 工作空间(WorkSpace):对于大型项目,可以进一步将多个包联合在一起,组织成工作空间 包(Crate):一个由多个模块组成的树形结构,可以作为三方库进行开发,也可以生成可执行文件进行运行 模块(Module):可以一个文件多个模块,也可以一个文件一个模块,模块可以被认为是真实项目中的代码组织单元 包和项目包 Crate对于 Rust 而言,包是一个独立的可编译单元,它编译后会生成一个可执行文件或者一个库。一个包会将相关联的功能打包在一起,使得该功能可以很方便的在多个项目中分享。同一个包中不能有同名的类型,...
Rust 基础入门(三)(更新中)
本文为阅读《Rust圣经》的第三篇笔记,内容包括《Rust基础入门》8~10章节,阅读本文前建议先阅读本网站的文章《Rust基础入门(一)》《Rust基础入门(二)》,后续章节请移步到本网站文章《Rust基础入门(四)》等,如果想查看原书请搜索“Rust圣经”或点击此链接:[Rust语言圣经(Rust Course)](https://course.rs/about-book.html) 泛型和特征泛型 Generics泛型的格式123456789// 单一泛型参数fn largest<T>(list: &[T]) -> T { // ...}// 多个泛型参数fn add<T, U>(a: T, b: T) -> bool { // ...} 泛型参数的名称你可以任意起,但是出于惯例,我们都用 T (T 是 type 的首字母)来作为首选,这个名称越短越好,除非需要表达含义,否则一个字母是最完美的。 注意:泛型的T可以是任何类型,但是上述的这些例子中,并不是所有类型都能比较(比较...
Rust 基础入门(二)(已完结)
本文为阅读《Rust圣经》的第二篇笔记,内容包括《Rust基础入门》5~7章节,阅读本文前建议先阅读本网站的文章《Rust基础入门(一)》,后续章节请移步到本网站文章《Rust基础入门(三)》等,如果想查看原书请搜索“Rust圣经”或点击此链接:[Rust语言圣经(Rust Course)](https://course.rs/about-book.html) 流程控制if 分支控制和大多数编程语言非常类似,Rust 也由 if 语句控制分支 12345if condition == true { // A...} else { // B...} if 语句块可以作为语句,也可以作为表达式,例如下面两个代码等效: 12345678910111213141516171819202122/* 1 */fn main() { let condition = true; let number = if condition { 5 } else { ...
MoeCTF 2025 Web 入门第一弹(已完结)
本文为 MoeCTF 2025 Web 部分 1~10章题解,附两个 revenge 和一个番外,题目网站为:MoeCTF 2025 - 西电 CTF 终端 第一章、神秘的手镯知识点:F12开发者工具题目要求在所给框中填入已知的10000字密码,但是不让粘贴。 不准粘贴,那就开发者工具将10000字密码输入到该替换的地方就行。 第一章(sp)、神秘的手镯_revenge知识点:Burp Suite 的 Intruder 爆破功能,备份文件题目提到备份文件wanyanzhou.txt,所以访问/wanyanzhou.txt.bak 下载该文件后,需要输入500次密码。 使用Burp Suite抓包得到以下信息: 在Burp Suite的Intruder模块进行爆破: Moe笑传之猜猜爆知识点:控制台,代码审计题目说仅给一次机会猜数,那必须得先知道数再猜: F12开发者工具,打开网络栏,发现有一份js代码,提取关键部分: 1234567891011121314151617function resetGame() { guessCount = ...
Rust 基础入门(一)(已完结)
本文为阅读《Rust圣经》的第一篇笔记,内容包括《Rust基础入门》前4章节,后续章节请移步到本网站文章《Rust基础入门(二)》等,如果想查看原书请搜索“Rust圣经”或点击此链接:[Rust语言圣经(Rust Course)](https://course.rs/about-book.html) 变量绑定与解构变量命名Rust语言变量命名不能和关键字重复 变量绑定将一个值绑定给一个变量,类似赋值但不完全是赋值,要注意“所有权”这个概念。 变量可变性Rust变量默认情况下不可变: 不可变变量: 12let x = 5;//此时不能再对x赋值,若有代码“x = 6;”则会报错 可变变量: 12let mut x = 5;//可以对x进行再赋值 未使用的变量如果未使用的变量开头不是下划线,则会引发warning 避免方法: 变量开头使用下划线 使用 #![allow(unused)] 属性,例如: 1234#![allow(unused)]fn main() { let x = 1;} 变量解构1let (a, mut b): (bool...







