gpt4 book ai didi

c# - GetSystemInfo() 为最大应用程序地址返回不同的值

转载 作者:行者123 更新时间:2023-11-30 15:20:42 25 4
gpt4 key购买 nike

我想在 C# 中调用 Windows 的 GetSystemInfo() API 函数以检索 maximumApplicationAddressminimumApplicationAddress 以扫描内存电脑。

我写了一个输出这些值的简单程序:

SYSTEM_INFO sys_info = new SYSTEM_INFO();
GetSystemInfo(out sys_info);
Console.WriteLine("Min Address: {0:X}", sys_info.minimumApplicationAddress.ToUInt64());
Console.WriteLine("Max Address: {0:X}", sys_info.maximumApplicationAddress.ToUInt64());

当我运行这个程序时,通过调试器(使用“开始”按钮),它显示:

Min Address: 10000
Max Address: 7FFEFFFF

但是当我构建它并运行可执行文件时,它会显示:

Min Address: 10000
Max Address: FFFEFFFF

Max Addresses 之间的区别对我来说有点奇怪。能解释一下原因吗?

最佳答案

这是您不应该关心的实现细节。您看到 FFFEFFFF 是因为您在 64 位操作系统上运行并且您的 EXE 项目的平台目标设置为 AnyCPU 并且勾选了“首选 32 位”选项。 .NET 项目的默认设置。 AnyCPU 选项获取可执行文件头集中的/LARGEADDRESSAWARE 选项位,告诉操作系统在 64 位操作系统上提供 4 GB 的地址空间。在 32 位操作系统上,您将始终获得 7FFEFFFF。

将平台目标设置为 x86 以查看差异。项目 > 属性 > 构建选项卡。

如果您希望调试版本产生相同的值,则需要使用“项目”>“属性”>“调试”> 取消选中“启用 Visual Studio 托管进程”选项。托管进程是另一个 EXE,yourproject.vshost.exe。它没有设置选项位可以说是一个错误。但很可能是解决棘手问题的便捷捷径。

您可以使用 Dumpbin.exe/headers 查看两者之间的区别。报告为“应用程序可以处理大 (>2GB) 地址”。

关于c# - GetSystemInfo() 为最大应用程序地址返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39474538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com