AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 729197
Accepted
Time4Tea
Time4Tea
Asked: 2022-12-22 03:43:13 +0800 CST2022-12-22 03:43:13 +0800 CST 2022-12-22 03:43:13 +0800 CST

大地址感知(LAA)如何在 Wine 中工作?

  • 772

任何人都可以阐明对 32 位应用程序的大地址感知 (LAA) 的支持在 Wine 中是如何工作的吗?

我知道在 Windows 中默认情况下,32 位应用程序被限制为最大 2GB RAM;但是,可以在可执行文件上设置 LAA 标志,以允许它最多使用 4GB。

我的理解是,默认情况下,Wine 尊重 32 位 Windows 应用程序的 2GB 限制,如果在 .exe 上设置了 LAA 标志,它将允许使用 4GB。但是,我听说还有一个全局选项可以为 Wine 设置为自动允许所有 32 位 Windows 应用程序使用 4GB - LARGE_ADDRESS_AWARE=1(或类似的东西?)。

有人可以澄清这是否是正确的环境变量吗?它在 vanilla Wine 中有效,还是仅在 Wine-staging 中有效?在 64 位 Wine 前缀中运行 32 位应用程序时是否也需要它?我以为有一个关于它的 Wine 用户指南页面,但我找不到它。

wine
  • 1 1 个回答
  • 87 Views

1 个回答

  • Voted
  1. Best Answer
    user554248
    2022-12-26T14:16:28+08:002022-12-26T14:16:28+08:00

    您可以为尝试在 WINE 下运行的每个 x86 应用程序安装一个补丁,您可以在此处找到该补丁:https ://ntcore.com/?page_id=371

    此外,还有一个用于在 PE 文件中设置 LAA 标志的 WINE 补丁。查看 github 中包含的文件的内容,您正在寻找的变量似乎是正确的LARGE_ADDRESS_AWARE https://github.com/randomstuff/pe-set-laa。根据这个补丁的创建者,它可以在 WINE 下工作。

    根据您尝试运行的内容(游戏或可移植可执行文件),某些应用程序的标志有效性似乎存在一些不一致。

    如果您想从源代码构建 Wine,您还可以使用此代码在全局上修补 LAA。

    diff --git a/dlls/kernel32/heap.c b/dlls/kernel32/heap.c
    index cac73ec..fb214b9 100644
    --- a/dlls/kernel32/heap.c
    +++ b/dlls/kernel32/heap.c
    @@ -1423,6 +1423,7 @@ VOID WINAPI GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer )
     
         /* values are limited to 2Gb unless the app has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag */
         /* page file sizes are not limited (Adobe Illustrator 8 depends on this) */
    +/*
         if (!(nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE))
         {
             if (lpBuffer->dwTotalPhys > MAXLONG) lpBuffer->dwTotalPhys = MAXLONG;
    @@ -1430,7 +1431,7 @@ VOID WINAPI GlobalMemoryStatus( LPMEMORYSTATUS lpBuffer )
             if (lpBuffer->dwTotalVirtual > MAXLONG) lpBuffer->dwTotalVirtual = MAXLONG;
             if (lpBuffer->dwAvailVirtual > MAXLONG) lpBuffer->dwAvailVirtual = MAXLONG;
         }
    -
    +*/
         /* work around for broken photoshop 4 installer */
         if ( lpBuffer->dwAvailPhys +  lpBuffer->dwAvailPageFile >= 2U*1024*1024*1024)
              lpBuffer->dwAvailPageFile = 2U*1024*1024*1024 -  lpBuffer->dwAvailPhys - 1;
    diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
    index 4d4bc3b..2c2264c 100644
    --- a/dlls/ntdll/virtual.c
    +++ b/dlls/ntdll/virtual.c
    @@ -1845,7 +1845,7 @@ void virtual_set_large_address_space(void)
     {
         IMAGE_NT_HEADERS *nt = RtlImageNtHeader( NtCurrentTeb()->Peb->ImageBaseAddress );
     
    -    if (!(nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return;
    +    // if (!(nt->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE)) return;
         /* no large address space on win9x */
         if (NtCurrentTeb()->Peb->OSPlatformId != VER_PLATFORM_WIN32_NT) return;
     
    
    • 1

相关问题

  • 酒中的汉字

  • 如何在不启动应用程序的情况下更新 WINEPREFIX

  • Debian 9 Stretch:无法找到 winehq-staging

  • 有没有办法查明是否安装了特定的 Wine 软件以及运行该软件的一般方法?

  • WINEPREFIX 是做什么的?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve