C#读取指针地址值

C#读取指针地址值,c#,pointers,memory,memory-management,memory-address,C#,Pointers,Memory,Memory Management,Memory Address,(对不起,我的英语不好) 如何从C#中的指针读取值地址 例如: 我知道我的指针,但值在应用程序启动时更改 1) 开始 2) 重新启动 实际上我有一个基址0x0018F36C 但需要从指针中读取值并保存为long 例如: long addr_base = 0x0018F36C; long address; //Obviously I do not know the Address 现在我需要从addr_base读取long值,并将该值(long)放入address 范例 addr_base =

(对不起,我的英语不好)

如何从C#中的指针读取值地址

例如: 我知道我的指针,但值在应用程序启动时更改

1) 开始

2) 重新启动

实际上我有一个基址0x0018F36C 但需要从指针中读取值并保存为long

例如:

long addr_base = 0x0018F36C;
long address;  //Obviously I do not know the Address
现在我需要从addr_base读取long值,并将该值(long)放入address

范例

addr_base = memory.ReadAddress(addr_base)

任何人都知道如何读取存储在名为addr_base的变量中的地址吗?

如果您的地址类似于
0x0018F36C
,您可以:

IntPtr ptr = (IntPtr)0x0018F36C;
long longValue = Marshal.ReadInt64(ptr);
如果您需要从一个地址读取另一个地址,则有另一种
封送处理方法:

IntPtr ptr = (IntPtr)0x0018F36C;
IntPtr ptr2 = Marshal.ReadIntPtr(ptr);

我很怀疑你为什么要这么做。。。首先,如何获取指针的值?它是否作为非托管函数的返回值出现?也许有更好的方法可以做到这一点。(我预测您将尝试使用
Marshal.ReadIntPtr()
,但它不会达到您期望的效果…)我从反汇编程序获取指针。我这样做是为了创建一个应用程序的插件。那么你是想从另一个进程读取内存?从中获取指针的应用程序是否与C#代码在一个单独的进程中运行?(我想一定是…)如果是这样,那么这就行不通了。此外,指针可能在两次运行之间更改。是。指针的值在运行时更改。但指针处的地址是相同的。不要改变。只需从指针获取新的addres值,但您将无法使用
Marshal.ReadIntPtr()
从另一个进程读取内存。Hello xanatos tanks需要帮助。第一个代码可以工作,但第二个示例有错误类型:尝试读取或写入受保护内存。这通常表示内存的其他部分已损坏。@JoeMartiniello,这个错误令人困惑,但它只是表示您试图做一些无效的事情,例如内存中的地址一开始就不是有效地址(您从一个固定值开始,这永远都不对)。从托管应用程序(如C#)中操作指针需要很好地理解地址的编组和固定,并了解
volatile
可以做什么,才能正确操作。由于您来自汇编程序,在您的情况下,从C和C++开始(甚至是混合模式程序集,如果您愿意),编写一个包装器可能比较容易。这样会感觉容易些。
IntPtr ptr = (IntPtr)0x0018F36C;
long longValue = Marshal.ReadInt64(ptr);
IntPtr ptr = (IntPtr)0x0018F36C;
IntPtr ptr2 = Marshal.ReadIntPtr(ptr);