我的内存中有一个特定的地址(让我们称之为ADR)具有特定的值(让我们假设4个字节为int)
我想在c#中创建一个int变量,并将该变量的地址更改为ADR,所以当我这样做时; print myVar它打印存储在ADR中的值。
我知道我可以创建一个IntPtr(ADR),然后使用Marshal方法来获取值,但是我想要一种方法来执行此操作而不必在每次必须读取值时调用方法。
谢谢!
答案 0 :(得分:5)
你知道你可以在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();
答案 1 :(得分:-1)
一种直接的方法是在C#代码中调用ASM代码,如Invoking Assembly Code in C#中所示。另一个合适的选择是使用指针。