ITPub博客

首页 > 数据库 > 数据库开发技术 > 【Rust日报】2023-03-28 北京线下 Rust Meetup 活动开始报名了

【Rust日报】2023-03-28 北京线下 Rust Meetup 活动开始报名了

原创 数据库开发技术 作者:Rust语言中文社区 时间:2023-03-29 23:48:57 0 删除 编辑

北京线下 Rust Meetup 活动开始报名了

4 月 8 日下午的北京线下 Rust Meetup 活动开始报名了,地点在 环球财讯中心北京市西城区宣武门外大街甲 1 号,二号线宣武门站,报名链接: https://www.meetup.com/rust-chinese-group/events/292379002

使用 Rust 从零写一个可执行程序

让我们假设我们想为 x86_64 的 Linux 制作一个二进制文件,它应该是非常便携的。它期望能在 Debian 和Arch Linux 上工作。它应该能在没有 glibc 的系统上工作,比如 Alpine Linux。它甚至应该在 FROM scratch Docker 容器中工作。在一个更严肃的环境中,你会把 musl-libc 和你的 Rust 程序静态连接起来,但今天我们要尝试在没有libc 的情况下工作。我们还将使用Rust,更确切地说,是 Rust 的稳定版,所以这篇博文不会使用 任何夜间版的功能。如果你使用的是 Rust 1.0 版本或更高版本(根据我的电脑,>=1.68.0),你应该可以很好地尝试这个方法。

最终代码:

#![no_std]
#![no_main]

use core::arch::asm;
use core::arch::global_asm;
use core::panic::PanicInfo;

#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
exit(1);
}

global_asm! {
".global _start",
"_start:",
"mov rdi, rsp",
"call main"
}

fn exit(status: i32) -> ! {
unsafe {
asm!(
"syscall",
in("rax") 60,
in("rdi") status,
options(noreturn)
);
}
}

unsafe fn write(fd: i32, buf: *const u8, count: usize) -> isize {
let r0;
asm!(
"syscall",
inlateout("rax") 1isize => r0,
in("rdi") fd,
in("rsi") buf,
in("rdx") count,
lateout("rcx") _,
lateout("r11") _,
options(nostack, preserves_flags)
);
r0
}

#[no_mangle]
unsafe fn main(_stack_top: *const u8) -> ! {
write(1, b"Hello world\n".as_ptr(), 12);
exit(0);
}

编译方式:

$ cargo build --release --target x86_64-unknown-none

ReadMore: https://vulns.xyz/2023/03/linux-executable-from-scratch-with-x86_64-unknown-none-rust/

Zig and Rust

作者从多个方面阐述了对 Zig 和 Rust 这两门语言的看法,最终总结来看

  • Rust是关于组合安全的,它是一种比 Scala 更可扩展(scalable)的语言。

  • Zig是关于完美的。它是一个非常 Sharp、危险,但更灵活的工具。

ReadMore: https://matklad.github.io/2023/03/26/zig-and-rust.html

Rust Search Extension v1.10.0 发布

ReadMore: https://rust.extension.sh/changelog/#v1-10-0-2023-03-25


From 日报小组 Koalr

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区


原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-11

  • 博文量
    1769
  • 访问量
    718637