【发布时间】:2015-08-09 03:57:56
【问题描述】:
(对不起,我的英语不好)
C#中如何从指针中读取值地址?
示例: 我知道我的指针,但值在应用程序启动时发生了变化。
1) 开始
(Pointer) 0x0018F36C = ( Value) 0x0342AD68
2) 重启
(Pointer) 0x0018F36C = ( Value Changed ) 0x0342AE20
其实我有一个基地址 0x0018F36C 但需要从指针中读取值并长保存
示例:
long addr_base = 0x0018F36C;
long address; //Obviously I do not know the Address
现在我需要从 addr_base 读取长值并将值(长)放入地址中
例子
addr_base = memory.ReadAddress(addr_base)
有人知道如何读取存储在名为 addr_base 的变量中的地址吗?
【问题讨论】:
-
我很怀疑你为什么这样做......你首先如何获得指针的值?它是作为非托管函数的返回值出现的吗?可能有更好的方法来做到这一点。 (我预测你会尝试使用
Marshal.ReadIntPtr(),但它不会达到你的预期......) -
我从反汇编程序获取指针。我这样做是为了为应用程序创建一个插件。
-
所以你想从不同的进程中读取内存?您从中获得指针的应用程序是否在与 C# 代码不同的进程中运行? (我想它一定是......)如果是这样,那么这将行不通。此外,指针可能会在运行之间发生变化。
-
是的。指针的值在运行时改变。但是指针处的地址是相同的。不要改变。只需要从指针中获取新的地址值
-
但是您将无法使用
Marshal.ReadIntPtr()从另一个进程中读取内存。
标签: c# pointers memory memory-management memory-address