rust 格式化问题(x86-未知-无目标)

问题描述 投票:0回答:1

我正在用 Rust 编写一个 x86_64 操作系统并在 qemu 电脑上测试它。我已经实现了 ELF 文件加载,并且我 100% 确定文件已正确加载和映射,因为我已经手动检查了内存。

我的问题是,当我尝试在

println!
中使用 rust 格式时,程序会跳转到第 0 页中的随机地址,该地址应该是只读段的一部分。之后,一些数据被解释为指令,结果我要么得到
page fault
要么得到
invalid opcode fault
。打印没有格式的字符串工作正常,但是当我尝试打印中间带有格式化整数的字符串时,我就会遇到这个问题。 ELF 可执行文件是使用
x86_64-unknown-none
目标编译的。

这是我的项目的 github 存储库:https://github.com/gillo04/alba/tree/main/kernel/src

user1/
目录中,您可以找到我正在尝试执行的程序的源代码。在
kernel/src/main.rs
文件中,在主函数的底部,您可以找到我用来加载可执行文件并跳转到它的代码。感谢您的帮助!

rust formatting x86-64 elf osdev
1个回答
0
投票

显然生成的 ELF 需要进行一些重定位才能正常工作。将

rusflags=["-C", "relocation-model=static"]
添加到我的
.cargo/config.toml
文件修复了问题,删除了重定位

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.