unsafe相关内容
我有一个 [u8;16384] 和 u16.我将如何“临时转换"数组,以便我可以一次设置两个 u8,第一个到最低有效字节,第二个到最高有效字节? 解决方案 正如 DK 建议的,你可能不应该真正使用 unsafe 代码来重新解释内存......但如果你愿意,你可以. 如果你真的想走那条路,你应该注意几个问题: 您可能遇到对齐问题.如果您只是从某处获取一个 &mut [u8] 并将
..
我刚刚将 Safari 从 Safari 9 更新为 safari 10 测试版.我的客户端是一个从页面运行的 Java 小程序.在 Safari 9 及之前的版本中,它运行正常.但是在 Safari 10 测试版中,它失败了.我发现 safari 10 阻止从 Java 小程序访问本地文件.所以我认为是因为java插件在安全模式下运行.但是在 Safari ->preferences->secu
..
我正在使用 Visual Studio 代码,当我尝试运行不安全代码时,它会引发以下错误“消息":仅当使用/unsafe 编译时才会出现不安全代码 和visual studio一样,它没有像project->properties这样的选项. 解决方案 不安全(C# 编译器选项) 要在 Visual Studio 开发环境中设置此编译器选项,请打开项目的“属性"页面. 单击
..
我在构建示例 Visual C++ 项目时遇到此错误.首先我下载了3个示例项目,都解决了同样的问题,打印出所有小于N的质数(你可能知道这些示例项目?).我没有任何问题地构建了纯 C 项目.但是当我尝试构建基于程序集的项目时,我遇到了这个错误. 谢谢. 解决方案 尝试禁用 SAFESEH. 来自规范:指定了/SAFESEH,但模块与安全异常处理功能不兼容.
..
我有一个带有以下签名的非托管 C++ 函数: int 函数(char* param, int ret) 我正在尝试从 C# 调用它: 不安全委托 int MyFunc(char* param, int ret); ... int Module = LoadLibrary(“fullpathToUnamanagedDll");IntPtr pProc = GetProcAddress(Mo
..
直到现在我才认为 Marshal.SizeOf 是计算非托管堆上 blittable 结构的内存大小的正确方法(这似乎是 SO 上的共识以及网络上几乎所有其他地方的共识). 但是在阅读了一些针对 Marshal.SizeOf 的警告之后 (这篇文章在“但是有一个问题......"之后)我试过了,现在我完全糊涂了: public struct TestStruct{公共字符 x;公共服务;}
..
Unity 中的 NativeArrays 没有从一个到另一个的部分复制功能. 有多种方法可以解决这个问题(NativeSlices 和 GetSubArray),但最理想的是零检查、所有信任、memcpy. 然而,我能想到的最接近的是这个,它什么也不做; 使用 Unity.Collections ;使用 Unity.Collections.LowLevel.Unsafe ;命名空间
..
有没有办法在不使用 unsafe 的情况下在 Rust 中实现未定义的行为? 当然,这样的行为可以被第三方库包装在一个“安全"的文件中.函数,所以假设我们只使用标准函数. 解决方案 绝对可以,但是 任何此类情况都是 Rust 或标准库的错误. 我最喜欢的例子是LLVM 循环优化可以使安全程序崩溃,这实际上是由于 Rust 和 LLVM 语义的不良交互而发生的: pub fn
..
在 mutagen 中,我注入了各种代码中的突变.我想改变的一件事是模式如果让 Ok(x) = y { .. }.然而,这带来了相当大的挑战,因为我无法知道 y 的类型——用户可以使用一元 Ok 变体.对于我们遇到的情况,我仍然可以机会性地对其进行变异实际上有一个 Result 其错误类型使用 trait 实现了 Default看起来像下面的简化: #![特征(专精)]酒吧特质错误{fn err
..
考虑以下事项: //只是一系列相同类型的相邻字段#[repr(C)]#[派生(调试)]结构 S T{在,乙:T,时间:T,d : t,}impl科技{fn new(a : T, b : T, c : T, d : T) ->自己 {自己 {一种,乙,C,d、}}//将其重新解释为数组fn as_slice(&self) ->&[T] {不安全 { std::slice::from_r
..
一个最近的问题正在寻找构建自我参照结构的能力.在讨论该问题的可能答案时,一个可能的答案涉及使用 UnsafeCell 用于内部可变性,然后通过 {:?}", v.value, v.myself.upgrade().map(|v| v.value))} 此代码似乎打印出我所期望的内容,但这并不意味着它是安全的或使用了已定义的语义. 从 UnsafeCell 转换为 T 内存安全吗?它会调
..
我 看到以下用于将字节数组返回给C的代码: #[repr(C)]结构缓冲区{数据:*mut u8,len:使用,}外部“C"fn generate_data() ->缓冲 {让 mut buf = vec![0;[512].into_boxed_slice();让数据 = buf.as_mut_ptr();让 len = buf.len();std::mem::forget(buf);缓冲区 {
..
我有一个不是 Send 的结构体,因为它包含 Rc.假设 Arc 的开销太大,所以我想继续使用 Rc.我仍然希望偶尔在线程之间Send这个结构,但前提是我可以验证Rc有strong_count 1和weak_count 0. 这是我想到的(希望是安全的)抽象: mod my_struct {使用 std::rc::Rc;#[派生(调试)]酒吧结构我的结构{reference_counted
..
我能以某种方式从 std::ptr::read 获取一个数组吗? 我想做一些接近于: let mut v: Vec= ...让 view = &some_struct as *const _ as *const u8;v.write(&std::ptr::read(view)); 在这种形式中无效(不能使用数组签名). 解决方案 如果您想从原始指针中获取切片,请使用 std::s
..
我有创建 RefCell 的代码,然后想将对该 RefCell 的引用传递给 单个 线程: 使用横梁;//0.7.3使用 std::cell::RefCell;fn 主(){让 val = RefCell::new(1);横梁::范围(|范围| {scope.spawn(|_| *val.borrow());}).解包();} 在完整的代码中,我使用了一种嵌入了 RefCell 的类型(a t
..
这个函数的实现是什么: fn unbox(value: Box) ->T{//???} 文档中唯一一个看起来像我想要的函数是 Box::into_raw.以下将进行类型检查: fn unbox(value: Box) ->T{*value.into_raw()} 这给出了错误error[E0133]: dereference of raw pointer requires unsafe f
..
我很难使用由 Unsafe.defineAnonymousClass() 加载的生成的字节码类.我想知道如何使用匿名类的对象来初始化另一个类(或匿名类). 以下面的示例类 Callee 为例,其构造函数接受 Callee2 作为参数. 类被调用者{Callee2 _call2;公共被调用者(Callee2 callee2){...}} 在运行时,我为 Callee2 和 Callee 生
..
我目前正在处理一些代码,这些代码反映了从调用中编组回本机 dll 的结构.一些结构包含指向空终止指针数组的 IntPtr* 字段.这些字段需要特殊处理.当反射结构时,我可以识别这些字段,因为它们由自定义属性标记. 以下说明了我正在尝试做的事情: public void ProcessStruct(object theStruct){foreach (FieldInfo fi in theS
..
为了对遗留代码进行单元测试,我试图在运行时换出方法的内容.我一直在处理这些 SO 答案; 动态替换 C# 方法的内容? 如何在我的方法的指针中替换指向重写(虚拟)方法的指针?(发布 x64 和 x86) 这是我目前所拥有的完整代码示例. 使用系统;使用 System.Diagnostics;使用 System.Reflection;使用 System.Runtime.Compile
..
背景 我想制作一些整数大小的 struct(即 32 位和 64 位),它们可以轻松转换为相同大小的原始非托管类型(即 Int32 和 UInt32 尤其适用于 32 位大小的结构. 然后,这些结构将公开用于位操作/索引的附加功能,而这些功能在整数类型上无法直接使用.基本上,作为一种语法糖,提高可读性和易用性. 然而,重要的部分是性能,因为这种额外的抽象本质上应该是 0 成本(在
..