- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在开发一个 C# 程序,它将加载文件并获取加载文件创建日期、修改日期、大小等信息。我需要知道的另一件事是加载的文件 (executable.exe
) 与 LARGEADDRESSAWARE
标志链接。 FileInfo 类不提供此信息。
有谁知道如何在 C# 中找出给定的 executable.exe 是否与 LARGEADDRESSAWARE
标志链接(以处理大于 2 GB 的地址)?
最佳答案
这里是一些检查大地址感知标志的代码。您所要做的就是传递一个指向可执行文件开头的流。
IsLargeAware("some.exe");
static bool IsLargeAware(string file)
{
using (var fs = File.OpenRead(file))
{
return IsLargeAware(fs);
}
}
/// <summary>
/// Checks if the stream is a MZ header and if it is large address aware
/// </summary>
/// <param name="stream">Stream to check, make sure its at the start of the MZ header</param>
/// <exception cref=""></exception>
/// <returns></returns>
static bool IsLargeAware(Stream stream)
{
const int IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x20;
var br = new BinaryReader(stream);
if (br.ReadInt16() != 0x5A4D) //No MZ Header
return false;
br.BaseStream.Position = 0x3C;
var peloc = br.ReadInt32(); //Get the PE header location.
br.BaseStream.Position = peloc;
if (br.ReadInt32() != 0x4550) //No PE header
return false;
br.BaseStream.Position += 0x12;
return (br.ReadInt16() & IMAGE_FILE_LARGE_ADDRESS_AWARE) == IMAGE_FILE_LARGE_ADDRESS_AWARE;
}
关于c# - 如何检查 exe 是否设置为 LARGEADDRESSAWARE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054469/
我已使用 editbin/LARGEADDRESSAWARE 命令更改我的 .NET C# exe,以便它可以寻址 > 2 GB 的内存。这工作正常,我可以运行 dumpbin 命令来验证它是否已成功
我想将我的应用程序切换到 LARGEADDRESSAWARE。需要注意的问题之一是指针运算,因为指针差异不能再表示为带符号的 32b。 有什么方法可以在大型 C++ 项目中自动查找指针减法的所有实例吗
我有一个包含一个 EXE 和多个 DLL 的 32 位应用程序。 EXE 已使用 /LARGEADDRESSAWARE 标志集构建。所以我希望在 64 位操作系统上我应该获得 4 GB 的用户地址空间
对于 win32 可执行文件 (x86),我们可以设置 LargeAddressAware 标志,以便它在 x64 Windows 上运行时可以访问 4 GB(而不是仅仅 2 GB)的虚拟地址空间。
Windows 允许您通过在 PE header 中设置标志 (/LARGEADDRESSAWARE) 将地址空间的使用限制为 32 位分辨率。详细说明:设置后,此标志有效地模拟 32 位虚拟地址空间
我正在开发一个 C# 程序,它将加载文件并获取加载文件创建日期、修改日期、大小等信息。我需要知道的另一件事是加载的文件 (executable.exe) 与 LARGEADDRESSAWARE 标志链
标题几乎概括了它。我有一个为 x86 平台编译的应用程序,它设置了 /largeaddressaware 标志。在 x64 系统上运行它,我“免费”获得了扩展的 4GB 用户模式虚拟内存,而无需指定
我有一个 .NET 程序集需要是 32 位的并且需要是 /LARGEADDRESSAWARE。 我知道如何使用 EditBin 执行此操作,但我想知道 Visual Studio 2010 中是否有内
在 PE header 中有一个标志指示二进制文件是否为 LargeAddressAware。 PE header 本身存在于 *.exe 和 *.dll 中。 Windows 操作系统真的只为父可执
我们需要将我们的一个可执行文件与此标志相关联,因为它会占用大量内存。 但是为什么要给一个EXE文件特殊处理呢。为什么不对 /LARGEADDRESSAWARE 进行标准化? 所以问题是:使用 /LAR
我有一个现有的 32 位 ASP.NET 应用程序,它使用 32 位非托管 DLL。 如果我在 64 位操作系统上运行它,它会自动成为 LARGEADDRESSAWARE(即可以访问完整的 4GB 虚
如标题所述,我在 win 7 64 位下运行一个 32 位应用程序。该应用程序是在 Embarcadero XE2 中用 C++ 编写的。我需要超过 2GB 的内存。 步骤: 我启用了 3GB 开关并
我是一名优秀的程序员,十分优秀!