【问题标题】:Why does GetSystemInfo().minimumApplicationAddress return a number greater than GetSystemInfo().maximumApplicationAddress?为什么 GetSystemInfo().minimumApplicationAddress 返回的数字大于 GetSystemInfo().maximumApplicationAddress?
【发布时间】:2019-12-09 05:04:35
【问题描述】:

我正在关注如何操作内存的教程,无论出于何种原因,以下代码给出了 65536 的 minimumAddress 和 -65537 的最大地址,这没有多大意义。

我希望最大地址大于最小值,否则意味着没有地址。

Here 是指向我正在关注的教程的链接,以防万一。

SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);

IntPtr proc_min_address = sys_info.minimumApplicationAddress;
IntPtr proc_max_address = sys_info.maximumApplicationAddress;

// saving the values as long ints so I won't have to do a lot of casts later

long proc_min_address_l = (long)proc_min_address;
long proc_max_address_l = (long)proc_max_address;

Console.WriteLine("Min Addr: {0}, Max Addr: {1}", proc_min_address_l, proc_max_address_l);

【问题讨论】:

  • 我无法重现此问题,最小地址为 65536,最大地址为 140737488289791
  • 这可能是一个错误还是 Windows 的一些安全锁?

标签: c# memory


【解决方案1】:

sys_info.maximumApplicationAddress 因平台类型而异:
任何 CPU:0xffffffff
x64: 0x00007ffffffffff
x86: 0x7ffeffff

当进行长转换时,您将转换为 0xfffeffff 的 4 字节有符号值 (int32),即 -65537。

由于使用内存地址,因此不会有任何负值,因此您可以更改为无符号值。

  • IntPtr 到 UIntPtr
  • 长到乌龙
    public struct SYSTEM_INFO
    {
    ...
        public UIntPtr minimumApplicationAddress;
        public UIntPtr maximumApplicationAddress;
    ...
    }
    
    public static void Main()
    {
        SYSTEM_INFO sys_info = new SYSTEM_INFO();
        GetSystemInfo(out sys_info);
    
        UIntPtr proc_min_address = sys_info.minimumApplicationAddress;
        UIntPtr proc_max_address = sys_info.maximumApplicationAddress;
    
        // saving the values as ulong ints so I won't have to do a lot of casts later
    
        ulong proc_min_address_l = (ulong)proc_min_address;
        ulong proc_max_address_l = (ulong)proc_max_address;
    
        Console.WriteLine("Min Addr: {0}, Max Addr: {1}", proc_min_address_l, proc_max_address_l);
    }
    
  • 【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多