【发布时间】:2019-07-16 16:06:17
【问题描述】:
考虑这个伪代码:
let k = 10;
let ptr = &k as *const k;
println!("{:p}", ptr); // prints address of pointer
let addr = format!("{:p}", ptr);
super-unsafe {
// this would obviously be super unsafe. It may even cause a STATUS_ACCESS_VIOLATION if you try getting memory from a page that the OS didn't allocate to the program!
let ptr_gen = PointerFactory::from_str(addr.as_str());
assert_eq!(k, *ptr_gen);
}
伪代码传达了这个想法:我希望能够通过 &str 表示获得指向某个内存地址的指针。这……可能吗?
【问题讨论】:
-
为什么不能先把字符串表示回一个无符号整数?
-
啊,这会通过 transmute 或 std::mem 或 std::ptr 下的东西来完成吗?
-
另外,如果我在学习低级编码时弄错了,请纠正我,但内存中的所有指针不都是相同大小的吗? (需要知道无符号使用多少位)
-
这里的要领在here回答,使用
from_str_radix()进行转换例如"0xdeadbeef" 为整数;从那里你投射到一个 ptr* 并希望没有人在看