如果我有一个struct
,例如:
#[derive(Clone, Copy)]
#[repr(C, packed)]
pub struct SomeData {
a: u16,
b: u64,
c: u32,
d: u16,
}
如何将它复制到内存中的特定位置,例如0x1000
有效地复制到内存中的某个点?像这样的东西会起作用吗?
let dst_addr: u64 = 0x1000;
let src = SomeData {a: 1, b: 2, c: 3, d: 4};
unsafe {
let tmp: &[u8; 10] = transmute(src);
copy(dst_addr as *mut _, tmp);
}
请注意,repr(C, packed)
这里实际上需要该部分。
该软件在裸 x86_64, ring 0上运行,没有操作系统或其他限制。另外,我在没有标准库的情况下进行编程,所以这应该可以只使用core
库来实现。
这当然是不安全的,但这不是问题。
编辑:只是澄清一下:我正在复制到未初始化的内存。