离线 EVM 字节码¶
inspect_evm_interface / inspect-evm-interface 从显式选定的一个本地字节码载体推断接口候选。该能力具有通用性:合约调查、兼容性分析、审计和 CTF 演示均使用同一可移植原语。它不要求存在活动的本机二进制目标。
rea inspect-evm-interface ./runtime.hex hex --json
rea inspect-evm-interface ./runtime.bin raw --json
{
"name": "inspect_evm_interface",
"arguments": { "path": "/artifacts/runtime.hex", "encoding": "hex" }
}
初始实际验证覆盖 Linux x64 上的扁平传统字节码以及未改动的内置 EVMole 0.9.3。EOF 风格的 EF00 容器返回 unsupported_target,并附带所选路径和格式原因。所选路径解析错误 ENOENT、ENOTDIR、ELOOP 和 ENAMETOOLONG 属于 invalid_request 路径问题。权限、资源、取消、提供方和清理失败保留其各自的分类。
宿主必须已提供 util-linux prlimit,通常位于 /usr/bin/prlimit;REA_EVM_PRLIMIT_COMMAND 可选择另一个绝对可执行文件。REA 不安装任何系统工具,也不修改任何用户配置。已随包提供上游来源与许可证。
证据语义¶
encoding为必填项:原始字节或 UTF-8 十六进制,可选0x前缀和外部 ASCII 空白。奇数长度的十六进制、内部分隔符、BOM、非 ASCII 空白和无效 UTF-8 均被拒绝。空字节码有效,但覆盖情况未知。- 载体 SHA-256 标识确切的原始文件,包括前缀/大小写和空白。解码后字节的 SHA-256 标识实际选定的 EVM 字节。这两种摘要都不是以太坊 Keccak 代码哈希。
- 默认内联返回完整字节码、上游函数偏移量和原始生产者表示。偏移量是解码后字节码中的字节位置。
- 上游在选择器恢复期间还会返回终端元数据。其报告的值保留在
raw_result中;JS 绑定中整数精度和非文本键覆盖情况未知。完整字节码保留原始编码元数据。 bytecode.metadata独立地从选定字节中解释一个合理的终端 CBOR 根映射。整数使用十进制字符串;字节字符串使用十六进制;标量键保留其类型。记录的偏移/长度指向原始字节码,因此摘要交付不会复制不透明的 CBOR 负载。嵌套容器具有部分标量覆盖;嵌套映射和数组中的映射键仍会检查重复。不支持或格式错误的候选报告not-decoded并附带诊断信息。解码限制为 64 层容器层级和终端负载的编码大小。- 不可用的尾部并不证明元数据缺失或 Solidity 来源。编译器版本字节/文本是元数据声明,而非经核实的编译器、源文件或已部署合约身份。历史遗漏解析为 null 未知面(facet),且不更改原始 Evidence 记录。不会获取元数据/源代码 URL。
- 选择器、参数字符串和状态可变性均为推断。不会查找函数名称/签名。优化代码可能产生不同的可变性候选;恢复的类型不是经过核实的源 ABI。
- 运行时/初始化代码身份、部署真实性、硬分叉和发现完整性仍然未知。空候选并不证明不存在可调用接口。
- 分析为离线进行:不执行目标运行时、不隐式查询链/RPC/浏览器、不执行钱包操作、不广播交易、不发出网络请求。
所选接口交付与保留视图¶
现有 CLI 调用以及省略 detail 或使用 complete 详情的 MCP 调用保留完整的内联结果。在保留型 MCP 服务器上,当问题需要每个推断函数及其身份/不确定性、且不需要字节码文本或重复的原始 stdout 时,可选择 detail: "summary":
{
"name": "inspect_evm_interface",
"arguments": {
"path": "/artifacts/runtime.hex",
"encoding": "hex",
"detail": "summary"
}
}
该结果是链接到其完整父 Evidence 的独立派生 Evidence。其 normalized_result.summary 保留每个生产者返回的选择器、解码字节偏移、分派、参数/可变性字符串(包括 null)、载体/解码身份、原始限制和显式未知项。负载 evidence_kind 仍为 inferred。它保留 stderr/截断信息,并记录 stdout 文本长度。视图内完整覆盖涵盖返回的候选;即使集合为空或已穷尽,发现完整性仍然未知。分析仍会运行;交付选择并不会节省解释器工作或改变源参数。
请将 normalized_result.parent_evidence_id 与 inspect_analysis_view 源类型 retained-evidence 配合使用。EVM 视图类型 evm 按原始行顺序分页 functions,或按 UTF-16 代码单元分页 bytecode_hex、stdout、stderr。十六进制页保留原始小写文本且不带前缀;两个字符表示一个解码字节。文本页偏移不同于函数的解码字节偏移。完整的父 Evidence 仍可通过正常的账本/导出工作流访问;读取视图不会重新运行分析或更改其身份。现有记录保留和关闭语义保持不变。
可移植的历史完整 EVM Evidence 可以在没有提供方的情况下使用源类型 inline。没有 Evidence 保留能力的固定服务器会在开始分析前拒绝所选 summary 交付,并继续支持完整交付。在向较旧服务器发送 detail 之前,请先了解其实际公布的 schema;当需要等效工作流时,请使用其完整操作。一次性 CLI 保留其现有的完整结果。
资源与生命周期限制¶
输入限制为 4 MiB,完整回复限制为 16 MiB,合并诊断输出限制为 1 MiB。受管工作进程拥有 256 MiB JavaScript 堆;其配置的最大值为 3 GiB 虚拟地址空间和 30 CPU 秒,并保留更严格的继承限制。下次调用时,工作进程命令截止时间为 timeout_ms(默认 30000 ms,整数 1 到 2147483647),或在 rea inspect-evm-interface 上使用 --timeout-ms。省略时保持 30000 ms。这些字节、地址空间和 CPU 上限没有运行时覆盖,且 timeout_ms 不会提高它们。过大的所选载体返回不可重试的 resource_constraint,资源为 file-size,并在 reported_limits.maximum_input_bytes 中给出其固定输入额度。完整回复额度拒绝使用相同的不可重试资源系列,并带有 reported_limits.maximum_reply_bytes;格式错误的 JSON 仍为不可读输出。该拒绝不会留下可通过其他交付通道检索的完整报告。虚拟地址空间不同于常驻内存。工作进程保留继承的更严格软/硬限制,内联报告其配置的软限制,并保持硬限制不变。WASM trap 预留已禁用,以便引擎可以在该虚拟限制内运行;实际内存并不等同于其 3 GiB 额度。超限失败不会产生部分成功。稳定快照、私有文件和受管进程的清理独立于调用方取消。无效输入、不支持、取消、超时和格式错误回复失败会在 details.captured_output 下保留有界 stdout/stderr,包括诊断输出是否被截断。清理失败保留原始错误投影和任何捕获的输出。成功结果也会从监督进程暴露 diagnostics.truncated。即使工作进程已写入有效回复,过多的诊断输出也会违反完整输出契约。SIGXCPU 保留 CPU 资源诊断和 CPU 特定指导。观察到的文件大小写入失败(EFBIG)和 SIGXFSZ 同样保留文件大小资源诊断。确切的信号/写入原因仍然未知。配置的软限制与未知的有效限制分开报告;仅凭接收到的信号并不能确定其确切原因。保留的文件大小退出需要由工作进程的 EFBIG 分支写入匹配的私有标记。裸启动器退出或不可写标记保留进程诊断,且资源原因未经证实。
Source/元数据、代理解析、存储/CFG 以及显式分叉执行/追踪在 #972 下仍保持为独立的增量,其结果或执行权限存在实质性差异。该原语不对部署或运行时行为作任何声明。
实际的验证通道追踪具有代表性的原始/十六进制 CLI 工作流,并检查是否只有声明的 Node/prlimit 启动器和进程所有权检查在运行。Socket 追踪允许本地 stdio socket 对,并拒绝网络请求的尝试。这些观察结果验证了那些测试夹具;它们并不是通用的网络沙箱。
对于独立的元数据解析器,npm run verify:solidity:metadata 使用一个现有的、由调用者选择的 solc 0.8.30 模块:
它使用非优化、viaIR、无内容哈希且无 CBOR 的设置编译自有夹具,验证观察到的尾部事实,并报告本地解码耗时。不会执行任何合约。该通道不确立完整的 Linux EVM 提供者的 CLI/MCP、资源限制或清理行为。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea