代码与苦涩

主要观点:作者在社交媒体上发布了一些关于 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块外进行任意原始指针类型的转换,这可能会引起误解和危险,作者对自己误写的代码表示歉意。
阅读 16
0 条评论