问题标签 [unsafe]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1612 浏览

c# - 从 C# 调用 AuditQuerySystemPolicy() (advapi32.dll) 返回“参数不正确”

顺序如下:

所有这些工作并返回预期的、合理的值,除了最后一个。打电话AuditQuerySystemPolicy()给我一个“参数不正确”的错误。我在想一定有一些微妙的解组问题。我可能误解了究竟AuditEnumerateSubCategories()返回了什么,但我很难过。

你会看到(注释)我试图从指针中取消引用返回AuditEnumerateSubCategories()指针。这样做或不这样做都会产生相同的结果。

代码:

0 投票
3 回答
1391 浏览

c# - 通过反射确定方法是否不安全

我正在寻找一种方法来过滤掉unsafe通过反射具有修饰符的方法。它似乎不是方法属性。

有办法吗?

编辑:似乎这个信息不在元数据中,至少我在 IL 中看不到它。但是反射unsafe器在 C# 视图中显示修饰符。关于它是如何完成的任何想法?

编辑 2:为了我的需要,我最终进行了检查,假设如果方法的参数之一是指针,或者返回类型是指针,那么该方法是不安全的。

当然,这不能处理在方法中执行不安全块的情况,但同样,我感兴趣的只是方法签名。

谢谢!

0 投票
1 回答
2723 浏览

c# - .NET:显示对象的存储位置或地址?

有没有办法获取对象的“地址”?这是出于演示目的,我知道这通常是一个坏主意,如果它完全可以作为unsafe代码工作。该项目已调整为允许不安全的代码。然而我的尝试没有成功。我到目前为止的代码没有编译:

Error: Cannot take the address of, get the size of, or declare a pointer to a managed type ('object')

即使无法检索内存地址,也可能是内存插槽或其他显示该对象位置的东西。

背景:我的目的是做一些演示,展示按值传递或按引用传递之间的差异,并转储这些对象的位置。

添加于 2010 年 6 月 27 日:

我最终放弃了从 .NET 程序本身内部进行操作的想法。似乎不会导致任何好的解决方案。即使它成功了,它也会使代码变得如此混乱,以至于你几乎无法用简单的方式解释结果并将其用于一些演示目的。我现在想按照下面答案中建议的方式使用一个好的(意味着 CLR 感知)调试器来完成它。

调试可以通过激活配置设置中的一个选项在 VS 内部进行改进Enable Unmanaged Debugging,不幸的是在 Visual Studio 的免费快速版(我现在在家中唯一的版本)中不可用。有没有办法Enable Unmanaged Debugging手动进行工作?

经过一番挣扎后,我安装了 Windows 调试工具,它为我提供了 WinDbg。我多年前用于驱动程序开发的好工具。现在它是一个巨大包裹的一部分。我试图按照说明让 SOS.DLL 工作但没有成功。我什至找不到这个 DLL。即使这个解决方案似乎也需要Enable Unmanaged Debugging项目中的标志......

0 投票
2 回答
3961 浏览

c# - 在 C# 中从 void* 转换为对象

在 C# 项目中,我需要通过将引用放入结构中来传递对象参数。即我有一个结构传递给调度员

其中 lpObject 包含一个指向自定义对象的指针,例如

SOMESTRUCT 结构从一个方法传递到另一个方法,最终到达我的代码。我无法修改执行流程,也无法修改奇怪的 SOMSTRUCT 系统,所以我猜唯一的解决方案是将我的对象转换为这样的指针:

但是,我不知道如何从 lpObject 字段中检索 myObject 成员。像这样的东西:

有没有办法做到这一点,还是不可能?如何告诉垃圾收集器处理对象?我应该创建一个新的垃圾收集对象并逐个字段复制数据吗?

蒂亚,

0 投票
4 回答
2853 浏览

c# - C# 中的不安全代码

C# 中不安全代码的限制是什么?例如,我可以像使用 C 或 C++ 一样进行几乎任意的指针转换和算术运算吗?

0 投票
3 回答
676 浏览

c# - 如何将 int 设置为 byte* C#

如何在字节*中的某个索引处将 int 转换为字节*?

理想情况下,我想要类似的东西:

它将位的第一部分设置为 igm[4],其余部分设置为 igm[5]。

编辑:我意识到可能有很多可能的方法来处理这个问题,如果可能的话,我正在寻找最有效的方法。

0 投票
1 回答
3267 浏览

c# - C# 中 bool* 的用处

我可以bool*以任何有意义的方式使用吗?我将如何转换bool*byte例如,或存储bool*在一个字节中

我的目标是在我的一个项目中管理我自己的记忆,细节并不重要,只是我喜欢做的事情。现在我希望能够存储我自己的变量,而我恰好需要存储一个布尔值。我如何使用unsafe和 abyte*存储这个布尔值,并最好地利用我的空间?理想情况下,在字节中存储 4 位。

0 投票
1 回答
240 浏览

.net - 在 .NET 中使用不安全代码时是否有限制?

我在 .NET 中看到了允许不安全代码选项。只有我的一个应用程序设置了它,所以我可以快速将图像复制到位图。

现在我勾选了那个框会有限制吗?mono 似乎在 linux 上运行良好。到目前为止,我没有看到任何问题。

0 投票
1 回答
243 浏览

.net - 不安全代码上的 CLR 和指向数组的指针?

CLR 如何与不安全代码交互我在 Google 上找到了各种结果,但我无法理解。我也很困惑垃圾收集器是否在处理不安全的代码?如果是,比怎么样?

我不能将指针指向数组的第一个元素我试试这段代码

但我得到了那个错误错误:无法将类型'int []'隐式转换为'int *'

0 投票
3 回答
3278 浏览

c# - 从 C# 调用 C++ 函数 - 不平衡堆栈

我有一个具有以下签名的非托管 C++ 函数:

我试图从 C# 调用它:

...

据我从旧的 C++ 项目规范中可以看出,param的 null 和ret的0都是函数的有效输入。当我尝试调用它时,它似乎可以工作,但是在退出时出现以下错误:

检测到 PInvokeStackImbalance

调用 PInvoke 函数 '...::Invoke' 使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。

我已经尝试了几乎所有我能想到的东西(不安全是最后的手段),但是我找不到任何方法来运行该函数而不会得到不平衡的堆栈。还有什么我可以尝试的吗?