docs/USAGE_CN.md
Box64 有许多环境变量可用于控制其行为,下面将按类别列出。
Box64 有两种构建类型:Wine WOW64 构建(WowBox64)和常规 Linux 构建。请注意,只有部分环境变量在 WowBox64 中可用。
除了环境变量之外,如果你使用的是常规 Linux 构建,Box64 默认还会在两个位置查找 rcfile:系统范围的 /etc/box64.box64rc 和用户目录下的 ~/.box64rc。
而在 WowBox64 中,配置文件仅在 %USERPROFILE%/.box64rc 处检查。
设置的优先级如下(从高到低):~/.box64rc > /etc/box64.box64rc > 环境变量。
配置示例:
[factorio]
BOX64_DYNAREC_SAFEFLAGS=0
BOX64_DYNAREC_BIGBLOCK=2
BOX64_DYNAREC_FORWARD=1024
BOX64_DYNAREC_CALLRET=1
此配置将使所有名为 factorio 的可执行文件应用指定的设置。
共享选项也可以定义在特殊的 [*] 配置段中。这些设置会全局应用,而更具体的配置段只会覆盖它自己显式定义的选项。
通配符匹配
可以使用星号(*)对应用程序名称进行基本的模式匹配。例如,[*setup*] 将匹配名称中包含 "setup" 的任何程序。请注意,这里实现的是简单的通配符匹配,而非完整的正则表达式支持。
共享设置
特殊的 [*] 配置段可为所有应用程序定义共享的 rcfile 选项。它不同于 [*setup*] 这类通配符配置段,是一个专用的全局配置段。
自定义配置文件
BOX64_RCFILE 环境变量可以指定一个替代的配置文件,而不是默认的 /etc/box64.box64rc。
按文件设置
以 / 开头的配置项适用于特定文件。例如:
[/d3d9.dll]
BOX64_DYNAREC_SAFEFLAGS=0
这些设置将仅影响 d3d9.dll 文件。此语法同样适用于模拟的 Linux 库,例如 [/libstdc++.so.6]。
启用或禁用动态重编译器(DynaRec)。如果在支持的架构上构建时开启了 DynaRec 支持,则默认为 1。 在 WowBox64 中可用。
仅生成对齐的原子操作(目前仅在 Arm64 上可用)。 在 WowBox64 中可用。
尝试构建更大的代码块以提高性能。 在 WowBox64 中可用。
优化 CALL/RET 指令。 在 WowBox64 中可用。
使用二级入口点(SEP)进一步优化 CALL/RET。如果 CALLRET 未启用则无效。 在 WowBox64 中可用。
启用或禁用延迟 FLAGS 的使用。 在 WowBox64 中可用。
是否允许继续运行未受保护且可能已脏的代码块。
是否禁用热页检测(即代码执行和数据写入同时发生的页面)。
启用或禁用快速 NaN 处理。 在 WowBox64 中可用。
启用或禁用快速舍入。 在 WowBox64 中可用。
定义构建代码块时允许的最大前向跳转值。 在 WowBox64 中可用。
启用或禁用原生FLAGS的使用。 在 WowBox64 中可用。
启用 x86 PAUSE 模拟,可能有助于自旋锁的性能。 在 WowBox64 中可用。
在 CALL/RET 指令和其他边缘情况下 FLAGS 模拟的行为。 在 WowBox64 中可用。
开启或关闭 x86 强内存模型的模拟。 在 WowBox64 中可用。
使用从 PE 文件解析的 volatile 元数据,仅对 64 位 Windows 游戏有效。
是否等待代码块构建完成。 在 WowBox64 中可用。
在运行 32 位代码的 64 位程序(如 Wine WOW64)上强制使用 32 位兼容的内存映射,可提高性能。
从代码块中移除架构元数据(在信号处理时使用)。 在 WowBox64 中可用。
如果可用,使用硬件计数器实现 rdtsc。
根据年龄阈值(BOX64_DYNAREC_PURGE_AGE)清除最近未执行的代码块。
代码块清除的年龄阈值(需要 BOX64_DYNAREC_PURGE=1)。
调整内存屏障以减少强内存模拟的性能影响。 在 WowBox64 中可用。
启用或禁用动态重编译器缓存(DynaCache)。此选项默认为 2(读取已有缓存但不生成新的)。DynaCache 默认将文件写入 home 文件夹,生成新缓存文件时会根据 BOX64_DYNACACHE_LIMIT 控制文件夹大小。
设置 DynaCache 文件的文件夹。默认为 $XDG_CACHE_HOME/box64,如果 $XDG_CACHE_HOME 未设置则为 $HOME/.cache/box64。
DynaCache 文件夹的最大大小(MiB)。超过限制时,会先删除无效的 DynaCache 文件,如仍超限再删除最旧的有效文件。默认大小为 2048MiB。
设置是否压缩磁盘上的 DynaCache 文件。
DynaCache 写入磁盘的最小大小(KB)。默认大小为 350KB。
是否暴露 AES 能力。 在 WowBox64 中可用。
在 rcfile 中指定当前条目适用的架构。此选项仅在 rcfile 中使用时生效。
arm64: 仅对 AArch64 应用当前条目。la64: 仅对 LoongArch64 应用当前条目。rv64: 仅对 RISC-V 应用当前条目。<empty>: 对所有架构应用当前条目,但如果存在更具体的条目,当前条目将被替换。 [默认值]向 CPUID 和 cpuinfo 文件暴露 AVX 扩展。在 Arm64 上默认值为 2,因为 DynaRec 已完全实现,其他架构默认为 0。 在 WowBox64 中可用。
用于指定 bash 可执行文件的路径。
指定要模拟的 CPU 类型。 在 WowBox64 中可用。
是否使用模拟的 crashhandler.so 库。
检测 MonoBleedingEdge 并应用保守设置(仅 Linux)。
启用或禁用除零异常的生成。 在 WowBox64 中可用。
启用或禁用 libtbb 检测。
强制使用 float/double 进行 x87 模拟。 在 WowBox64 中可用。
允许在信号处理器中使用 DynaRec。
直接退出,不运行程序。
修复 64 位 inode。
是否强制 BOX64_LD_PRELOAD 库中的符号通过 RTLD_NEXT 解析。
忽略 INT3 指令。
检测 libjvm 并应用保守设置。
检测 libcef 并应用 BOX64_MALLOC_HACK 设置。
挂钩 malloc 操作符时的行为。
暴露的最大 CPU 核心数。 在 WowBox64 中可用。
不加载任何 rc 文件。
查找 x86_64 二进制文件的路径。
暴露 PCLMULQDQ 能力。 在 WowBox64 中可用。
预定义的环境变量集合,以兼容性或性能为导向。 在 WowBox64 中可用。
python3 可执行文件的路径。
要加载的 rc 文件路径。
在 Intel CPU 类型的 CPUID 中报告 Invariant TSC 位。 在 WowBox64 中可用。
为程序保留高内存区域,在 Box32 上始终启用。
对包装的 SDL2 使用 SDL_GetJoystickGUIDInfo 函数的变通方案。
暴露 SHAEXT(即 SHA_NI)能力。 在 WowBox64 中可用。
SSE Flush to 0 FLAGS的行为,同时追踪 SSE 异常FLAGS。 在 WowBox64 中可用。
暴露 SSE4.2 能力。 在 WowBox64 中可用。
为 Linux Steam UI 强制使用 Vulkan。
在 x86 和原生之间同步舍入模式。
检测 UnityPlayer 并应用保守设置。
告诉 Box64 这是一个 Unity 游戏。
是否强制 Xorg GLX 扩展存在。
是否强制 X11 显示同步操作。
加载 X11 时调用 XInitThreads。这主要用于使用 Loki_Compat 库的旧 Loki 游戏。
x87 80 位 long double 的行为。 在 WowBox64 中可用。
禁用 32 位二进制文件的自动 personality 切换(在 Box32 上始终启用)。
传递给目标程序的参数,仅在没有任何已有参数时有效。
在命令行前添加参数。
向目标程序添加 --in-process-gpu 参数。
向目标程序添加 --no-sandbox 参数。
添加额外需要的共享库(这个选项不太常用)。
是否允许忽略缺失的共享库。
强制使用模拟库。
查找 x86_64 库的路径。
强制随二进制文件加载库。
设置 libGL 的名称。
不加载包装的 GTK 库。
不加载 PulseAudio 库(原生库和模拟库均不加载)。
不加载 Vulkan 库。
不加载 x64 Vulkan 覆盖层。
优先使用模拟库而非原生库。
即使库使用绝对路径指定,也优先使用包装库。
优先使用包装库处理 EGL 和 GLESv2。
添加环境变量。
添加环境变量。
启用或禁用 dlsym 错误的日志记录。
是否输出 elfloader 调试信息。 在 WowBox64 中可用。
启用 DynaRec 转储。 在 WowBox64 中可用。
转储指定范围内的代码块。 在 WowBox64 中可用。
GDBJIT 调试支持,仅在使用 -DGDBJIT=ON 构建时可用,通过 gdb 命令启用:jit-reader-load /usr/local/lib/libbox64gdbjitreader.so。
禁用或启用 DynaRec 日志。 在 WowBox64 中可用。
打印缺失的指令。 在 WowBox64 中可用。
禁用可选的主机扩展。
crc32,pmull,aes,atomics,sha1,sha2,uscat,flagm,flagm2,frintts,afp,rndr,LoongArch:lasx,lbt,frecipe,lam_bh,lamcas,scq,以及 RISC-V:zba,zbb,zbc,zbs,vector,xtheadba,xtheadbb,xtheadbs,xtheadmemidx,xtheadmempair,xtheadcondmov。为 Linux perf 工具生成映射文件。
启用 DynaRec 与解释器的执行对比,非常慢,仅用于测试。 在 WowBox64 中可用。
启用 COSIM 发现差异的 IP 地址去重。 在 WowBox64 中可用。
当 BOX64_DYNAREC_DUMP 启用时不转储测试代码。 在 WowBox64 中可用。
启用或禁用 DynaRec 追踪。
发生 SIGSEGV、SIGILL 和 SIGBUS 时是否启动 gdb。
my_box64signalhandler 的线程),然后可能需要 finish 1 或 2 个函数(在 usleep(..) 内部),之后你将进入 my_box64signalhandler,就在 Segfault 消息的 printf 之前。然后 set waiting=0 退出无限循环。gdb /PATH/TO/box64 然后 target remote 127.0.0.1:1234 连接到 gdbserver(如果不在本机,则使用实际 IP)。之后的操作步骤与 BOX64_JITGDB=1 相同。设置程序加载的地址,仅对 PIE 目标程序有效。
启用或禁用 Box64 日志,如果 stdout 不是终端则默认为 0,否则为 1。 在 WowBox64 中可用。
禁用 Box64 横幅。 在 WowBox64 中可用。
在指定的地址范围内禁止创建代码块,有助于调试 DynaRec 和解释器之间的行为差异。 在 WowBox64 中可用。
延迟后移除 NoDynaRec 范围。 在 WowBox64 中可用。
禁用 SIGSEGV 的处理。
禁用 SIGILL 的处理。
当捕获信号时显示最近几个包装函数调用。
捕获信号时显示原生和模拟的回溯。
始终显示 SIGSEGV 信号详情。
启用或禁用彩色追踪输出。
启用或禁用 EMM(即 MMX)追踪输出。
将所有日志和追踪发送到文件而非 stdout。
stderr。 [默认值]stdout。与 BOX64_TRACE 相同,但立即开始追踪。
symbolname 启用追踪输出。追踪在依赖项初始化之前开始。在 N 个指令执行后开始追踪。
启用或禁用 XMM(即 SSE)追踪输出。
仅在带追踪功能的 box64 构建中可用。添加所有执行指令的追踪以及寄存器转储。
symbolname 启用追踪输出。