用途:ClickHouse 的 release/CI clickhouse 二进制是自解压格式,由解压器 stub、zstd 压缩的真实 ELF 和尾部元数据组成。常规做法是直接运行二进制完成自解压,但若其架构与宿主不同且未安装对应 qemu 用户态模拟,就无法运行。本技能可在任意宿主上不执行任何程序地提取内部 ELF。
适用场景:CI/release 二进制在 gdb/lldb 中看不到真实符号(只见到解压 stub 的极小符号表);二进制架构与宿主不同;需要内部 ELF 来加载 core dump。
格式:文件依次为解压器 ELF、压缩数据块、FileData 数组(每项后接文件名)、文件末尾 16 字节 MetaData。MetaData 含 number_of_files 与 start_of_files_data;FileData 为 48 字节,含 start、end、name_length、uncompressed_size、umask 和 exec 标志。exec=true 的条目即打包的 clickhouse ELF。
用法:先从对应提交的构建任务下载二进制,例如: curl -s "https://clickhouse-builds.s3.amazonaws.com/PRs/<pr>/<sha>/build_<arch>_<sanitizer>/clickhouse" -o clickhouse.sfx 再执行: python3 .claude/skills/decompress-binary/extract_self_extracting.py clickhouse.sfx clickhouse.elf 随后校验: file clickhouse.elf llvm-objdump -s -j .note.gnu.build-id clickhouse.elf | tail build id 必须与 core/崩溃报告一致,否则回溯不可用。加载 core 可用: gdb clickhouse.elf core.<pid> 或 lldb clickhouse.elf -c core.<pid>
限制:下载被截断或损坏是最常见失败原因,若脚本报出异常的 number_of_files 需重新完整下载并核对大小;内部 ELF 很大(sanitizer 构建可达数 GB,未 strip),需预留磁盘空间。若宿主架构匹配或已装 qemu 用户态模拟,直接运行 ./clickhouse 自解压即可,无需本技能。