Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问32位内存地址c#_C#_Memory Address_Intptr - Fatal编程技术网

访问32位内存地址c#

访问32位内存地址c#,c#,memory-address,intptr,C#,Memory Address,Intptr,我试图访问一个32位地址,但当我创建IntPtr时,它抛出一个OverflowException。代码如下: uint memAddr = 0xF5920824; IntPtr bufPtr = new IntPtr(memAddr); byte[] data = new byte[4]; Marshal.Copy(bufPtr, data, 0, 4); 如何访问该地址?对于如此大的数字>2^31-1,您需要编译为64位 转到配置管理器。。。并将平台从x86更改为任何CPU或x64。通过将u

我试图访问一个32位地址,但当我创建IntPtr时,它抛出一个OverflowException。代码如下:

uint memAddr = 0xF5920824;
IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[4];
Marshal.Copy(bufPtr, data, 0, 4);

如何访问该地址?

对于如此大的数字>2^31-1,您需要编译为64位


转到配置管理器。。。并将平台从x86更改为任何CPU或x64。

通过将
uint
传递到
IntPtr
,可以将其转换为
long
,因为
IntPtr
不支持无符号整数。然后,如果在32位进程中运行,
uint
溢出
int


您需要使用64位来读取该地址。

您的程序无法访问另一个程序的内存地址(无论您要读取的地址是否适合
Int32
,请参阅以了解它是什么)只需使用
IntPtr
,因为它们在其专用地址空间内运行

它必须以某种方式由第一个程序共享(共享内存或其他东西)。此外,一个程序中的地址XYZ甚至在同一程序的另一个实例中也可能完全不同(因为该地址是虚拟的)

如果您确定内存地址(如何?甚至可能需要扫描进程内存),则必须p/Invoke,这是一个为调试目的而设计的函数,如果您的可执行文件具有足够的权限,则可以读取另一个进程的内存。

请参见示例。

为什么要访问该地址?您试图读取的地址位于3GB点-根据您的操作系统,我认为这是一个受限地址。请提供更多信息。我只是想提高我的知识,我正在使用一个程序(由朋友完成),该程序在该地址处有一个隐藏值(我知道)。我的操作系统是Win7 64位,我使用的是visual studio 32位(学生版),您需要什么信息?@Demon0112-您试图访问非法地址。将应用程序编译为x64应用程序,它将不再是非法的。