这是我的 Ethernaut 靶场个人学习笔记,用来记录每一关的题目目标、漏洞原理、利用过程和复盘要点,方便后续按关卡重新练习和查漏补缺。
关卡:Level 2 - Fallout
本关目标利用构造函数拼写错误,获得 Fallout 合约 owner。
考察知识点
构造函数历史写法
函数名拼写错误
public 初始化函数风险
题目源码12345678910111213141516171819202122232425262728293031323334353637383940414243// SPD...
这是我的 Ethernaut 靶场个人学习笔记,用来记录每一关的题目目标、漏洞原理、利用过程和复盘要点,方便后续按关卡重新练习和查漏补缺。
关卡:Level 1 - Fallback
本关目标成为 Fallback 合约 owner,并调用 withdraw() 把实例余额清空。
考察知识点
fallback/receive 入口
低金额 contribute 铺垫权限条件
owner 接管后提款
题目源码123456789101112131415161718192021222324252...
这是我的 Ethernaut 靶场个人学习笔记,用来记录每一关的题目目标、漏洞原理、利用过程和复盘要点,方便后续按关卡重新练习和查漏补缺。
关卡:Level 0 - Hello Ethernaut
本关目标熟悉 Ethernaut 的基本操作:连接钱包、创建实例、在浏览器控制台调用合约、提交实例。
考察知识点
Ethernaut 实例生命周期
浏览器控制台与异步合约调用
公开变量 getter
题目源码1234567891011121314151617181920212223242526272829...
对应代码文件:src/bin/16_async_await.rs
运行命令:
1cargo run --bin lesson16_async_await
学习目标异步编程用于在等待 IO、网络或定时器时不阻塞整个线程。Rust 使用 Future、async 和 .await 表达异步任务。
本节示例保持无外部依赖,重点解释机制。真实项目通常会使用 Tokio 或 async-std 这样的异步运行时。
理解 async fn 返回 Future。
知道 .await 表示等待异步结果。
理解 Futur...
对应代码文件:src/bin/15_std_functions_macros.rs
运行命令:
1cargo run --bin lesson15_std_functions_macros
学习目标本节整理日常 Rust 编程中常见的标准库函数、方法和宏。它们能显著提高代码表达力。
宏看起来像函数,但以 ! 结尾,并在编译期展开。常见宏包括 println!、format!、vec!、dbg!。
理解函数、方法和宏的基本区别。
掌握格式化输出、调试输出和集合创建。
会使用 Option、Result 的常...
对应代码文件:src/bin/14_lifetimes.rs
运行命令:
1cargo run --bin lesson14_lifetimes
学习目标生命周期描述引用有效的范围。它让编译器确认引用不会指向已经释放的数据。
初学时不要把生命周期理解成手动控制内存。它只是对引用关系的标注和检查。
理解生命周期用于防止悬垂引用。
知道很多生命周期可以由编译器自动省略。
会读懂简单的 'a 标注。
理解结构体中保存引用时为什么需要生命周期参数。
核心概念速查
术语
基本意思
本节用途
生命...
对应代码文件:src/bin/13_traits_trait_bounds.rs
运行命令:
1cargo run --bin lesson13_traits_trait_bounds
学习目标Trait 定义类型可以具备的行为。Trait bound 则约束泛型类型必须实现某些行为。
如果说泛型回答“我可以接收哪些类型”,trait bound 就回答“这些类型至少要会做什么”。
理解 trait 是行为接口。
会为自定义类型实现 trait。
会用 impl Trait 和 <T: Trait&...