【问题标题】:c# change variable memory addressc#改变变量内存地址
【发布时间】:2015-05-23 19:01:12
【问题描述】:

我的内存中有一个特定的地址(我们称之为 ADR),具有特定的值(假设 4 字节 int)

我想在 c# 中创建一个 int 变量并将该变量的地址更改为 ADR,例如,当我这样做时; print myVar 它打印存储在 ADR 中的值。

我知道我可以创建一个 IntPtr(ADR),然后使用 Marshal 方法来获取值,但我想要一种方法来做到这一点,而无需在每次必须读取值时调用方法。

谢谢!!

【问题讨论】:

  • 我认为局部变量的地址总是在堆栈的某个地方,而对象中的字段地址与对象的地址有一些偏移。所以我不知道您可以为其选择地址的“变量”类型。
  • 我不明白这个被否决的原因

标签: c# memory


【解决方案1】:

您知道可以在 C# 中使用指针吗?

int someVariable = 0;

unsafe
{
    int* addr = &someVariable;
    *addr = 42;
}

Console.WriteLine(someVariable); // Will print 42

如果你已经有地址,你可以写:

int* addr = (int*)0xDEADBEEF;

或者,来自IntPtr

var intPtr = new IntPtr(0xDEADBEEF);
int* addr = (int*)intPtr.ToPointer();

【讨论】:

  • 可能还值得注意的是,他必须为他的项目打勾Allow unsafe code
【解决方案2】:

一种直接的方法是在您的 C# 代码中调用 ASM 代码,您可以在 Invoking Assembly Code in C# 中看到。另一个合适的选择是使用指针。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多