一、Rust程序简介
Rust是一种现代系统级编程语言,由 Mozilla 于 2010 年推出,专注于性能、安全性和并发性。它通过独特的所有权系统 在编译期消除内存错误,无需垃圾回收机制即可保证内存安全。
核心特性:
1.内存安全,通过所有权(Ownership)、借用(Borrowing)和生命周期(Lifetimes)机制,在编译期确保内存安全,避免空指针、悬垂指针、内存泄漏等问题;
2.零成本抽象,高级语法(如泛型、闭包)编译后接近手写汇编的效率;
3.并发编程,async/await
原生支持异步;基于Send
和Sync
特质(trait)的安全线程模型;
4.丰富的工具链,内置包管理器Cargo
;集成测试、文档生成(cargo doc
)。
二、使用Cargo编译Rust程序
1.安装 Rust和Cargo 通过官方脚本安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
2.创建/进入项目
cargo new my_project
cd my_project
3.编译和运行
debug版(默认):
cargo build # 编译到 target/debug/
cargo run # 编译并运行
release版(优化后的二进制):
cargo build --release # 编译到 target/release/
cargo run --release
三、交叉编译
编译流程
动态链接
1.添加目标平台
rustup target add i686-unknown-linux-gnu # x86
rustup target add armv7-unknown-linux-gnueabihf # ARMv7
rustup target add aarch64-unknown-linux-gnu # ARM64
2.安装目标平台的链接器工具链(以Ubuntu为例)
# x86
sudo apt install gcc-multilib
# ARMv7
sudo apt install gcc-arm-linux-gnueabihf
# ARM64
sudo apt install gcc-aarch64-linux-gnu
3.配置Cargo链接器 在.cargo/config.toml
中添加:
[target.i686-unknown-linux-gnu]
linker = "gcc"
rustflags = ["-C", "link-args=-m32"]
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
4.在项目的Cargo.toml所在目录进行编译
# x64
cargo build --release
# x86
cargo build --target i686-unknown-linux-gnu --release
# ARMv7
cargo build --target armv7-unknown-linux-gnueabihf --release
# ARM64
cargo build --target aarch64-unknown-linux-gnu --release
5.查看输出路径
x64:target/release/my_project
x86: target/i686-unknown-linux-gnu/release
ARMv7:target/armv7-unknown-linux-gnueabihf/release
ARM64:target/aarch64-unknown-linux-gnu/release
静态链接
1.添加目标平台
rustup target add x86_64-unknown-linux-musl # x64
rustup target add i686-unknown-linux-musl # x86
rustup target add armv7-unknown-linux-musleabihf # ARM32
rustup target add aarch64-unknown-linux-musl # ARM64
2.安装目标平台的链接器工具链
# 下载并安装 x86_64 musl 交叉编译器
wget https://musl.cc/x86_64-linux-musl-cross.tgz
tar -zxf x86_64-linux-musl-cross.tgz -C /usr/local
# 下载并安装 i686 musl 交叉编译器
wget https://musl.cc/i686-linux-musl-cross.tgz
tar -zxf i686-linux-musl-cross.tgz -C /usr/local
# 下载并安装 ARM musl 交叉编译器
wget https://musl.cc/arm-linux-musleabihf-cross.tgz
tar -zxf arm-linux-musleabihf-cross.tgz -C /usr/local
# 下载并安装 ARM64 musl 交叉编译器
wget https://musl.cc/aarch64-linux-musl-cross.tgz
tar -zxf aarch64-linux-musl-cross.tgz -C /usr/local
# 添加到 PATH(临时)
export PATH=$PATH:/usr/local/x86_64-linux-musl-cross/bin
export PATH=$PATH:/usr/local/i686-linux-musl-cross/bin
export PATH=$PATH:/usr/local/arm-linux-musleabihf-cross/bin
export PATH=$PATH:/usr/local/aarch64-linux-musl-cross/bin
4.在项目的Cargo.toml所在目录进行编译
# x64 (64位)
cargo build --target x86_64-unknown-linux-musl --release
# x86 (32位)
cargo build --target i686-unknown-linux-musl --release
# ARM32
cargo build --target armv7-unknown-linux-musleabihf --release
# ARM64
cargo build --target aarch64-unknown-linux-musl --release
5.查看输出路径
x64:target/x86_64-unknown-linux-musl/release
x86:target/i686-unknown-linux-musl/release
arm32:target/armv7-unknown-linux-musleabihf/release
arm64:target/aarch64-unknown-linux-musl/release
常用命令
功能 | 命令 |
---|---|
列出所有目标平台 | rustup target list |
安装目标平台 | rustup target add <target> |
卸载目标平台 | rustup target remove <target> |
交叉编译 | cargo build --target <target> --release |
四、安全防护
Rust编译后的程序是系统的Native程序(本地程序),可以由成熟的保护工具Virbox Protector
工具来对Rust编译后的程序进行加固保护,该工具不仅支持Rust编译的程序,也可以对Windows、Linux、mac系统的Native程序进行加壳保护,对Native程序保护具备以下特性:
- 高安全性,可通过虚拟化技术对代码进行保护,程序运行时也不会进行解密,防止在内存中解析代码逻辑;
- 反调试,通过调试器检测功能检测保护后的程序是否被调试,调试时运行崩溃;
- 支持SDK标签,可在源代码中定义SDK标签来指定保护功能,使用工具加固保护后SDK标签即可生效;
- 支持命令行加壳,可以与自动化流程进行集成,在自动化过程中进行加壳操作。