主要观点:作者在社交媒体上发布了一些关于 Rust 中原始指针的内容,包括一个玩笑程序及相关解释,还提到了对 Rust 指针的一些学习和认识。
关键信息:
- 玩笑程序通过将
main
函数地址转换为usize
来获取随机值,利用了 ASLR(地址空间布局随机化),但这只是个玩笑且不建议在实际程序中使用,因为 ASLR 不是好的随机数生成器。 - 代码中存在将
main
函数转换为*const fn() as usize
的情况,由于 Rust 中没有“原始函数指针”,编译器允许在unsafe
块外将任意原始指针类型进行转换,这很危险,可能会误导读者。 - 有人指出有程序实际尝试从程序地址中获取随机性,但作者自己不会发布类似代码。
重要细节: - 在玩笑程序中,
let rand = main as usize;
通过获取main
函数的地址并转换为整数来模拟随机数生成,但这只是个示例,实际不可取。 - 对于引用地址转换,Rust 通常需要通过原始指针进行,而函数指针的转换方式不同,
*const fn()
在 Rust 中无意义,可使用foo as *const ()
临时持有未类型化函数指针。 - 编译器允许在
unsafe
块外进行任意原始指针类型的转换,这可能会引起误解和危险,作者对自己误写的代码表示歉意。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。