跳转至

PE TLS 回调与加载配置

使用 inspect_pe_load_config 定位声明的 TLS 回调,并检查显式本地 PE32 或 PE32+ 映像的加载配置。无需反汇编器、Windows 主机或目标执行。

rea inspect-pe-load-config /absolute/path/to/application.exe --json
rea inspect-pe-load-config /absolute/path/to/application.exe --max-callbacks 256 --json

MCP 接受 { "path": "/absolute/path/to/application.exe" }。CLI 路径可以相对于当前目录;MCP 路径必须为绝对路径。

完整 Evidence 包含工件路径、SHA-256、数据目录文件范围以及回调数组文件范围。tls 报告原始数据范围、索引地址、零填充大小、特征以及以 null 结尾的回调数组。回调 VA 是十六进制字符串,以保持 64 位精度。RVA、映射文件偏移和节区是派生位置;未知映射为 null。

load_config 仅在其声明的 Size 覆盖整个字段时才报告字段。MSVC x86 映像通常声明一个 64 字节的加载配置数据目录,而结构自身的 Size 更大;与 Windows 加载器一样,当这些字节在单次运行中有文件支持时,REA 读取 Size 字节,并同时报告 directory.size 和 size。structure_location 是 REA 检查的 Size 字节的文件范围;当两者不同时,Evidence 位置会在声明的数据目录范围旁边列出该范围。不可用字段为 null;被覆盖的零指针仍为 "0x0"。

报告包含安全 Cookie、PE32 SafeSEH 表/计数、CFG 指针及表/计数、address-taken IAT 与长跳转表/计数、EH 续延表/计数,以及 XFG 检查指针。CHPE 和动态重定位指针为原始值。当 Size 覆盖动态重定位表偏移(DWORD)和节区(WORD)时,它们会被单独报告,包括零值;REA 不会从该配对推断 VA,也不会解码目标和缓解表条目。

Guard 标志保留原始 DWORD、已识别名称、未知位以及 CFG 条目步长。从这些标志推导出的缓解声明带有 evidence_kind: "inferred";它们不证明运行时强制执行。映像永远不会被执行。数据目录缺失仅表示观察到这些声明不存在,而非证明不存在通过其他机制实现的回调或缓解措施。

默认读取预算为 64 MiB(max_file_bytes,上限 512 MiB)。默认回调预算为 64(max_callbacks,上限 4096)。如果恰好占满预算的数组其下一个槽位为 null,则该数组会被接受。截断、不明确或未映射的目录及回调数组存储会失败关闭,预算耗尽时同样如此;不会返回部分成功。未映射的回调目标保留其 VA/RVA,但文件偏移未知。超出受支持字段范围的加载配置版本保持未解码。

布局参考:Microsoft PE 格式、IMAGE_LOAD_CONFIG_DIRECTORY32 和 IMAGE_LOAD_CONFIG_DIRECTORY64。

对于真实的交叉编译测试样本,请在 PATH 中包含 Zig(或将 REA_ZIG 设置为其路径)的情况下运行 npm run verify:pe:load-config。该脚本会构建 PE32 和 PE32+ 样本,并通过公共 CLI 检查它们,而不会运行它们。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea