soul-sol/go-exec-format-doctor
GitHub: soul-sol/go-exec-format-doctor
一款纯 Go 实现的本地二进制文件诊断工具,通过解析文件头来检测目标架构与宿主环境的兼容性,帮助开发者快速定位跨平台编译中的 exec format error 问题。
Stars: 0 | Forks: 0
# go-exec-format-doctor
[](https://pkg.go.dev/github.com/soul-sol/go-exec-format-doctor)
无需运行文件即可诊断 `exec format error` 和二进制架构不匹配问题。
`go-exec-format-doctor` 读取本地文件头并报告:
- ELF、Mach-O、通用 Mach-O 和 PE 的目标架构
- shebang 脚本及其请求的 interpreter
- 无法直接执行的 ar 和 ZIP 归档文件
- 被截断或未知的文件头
- 当前主机的 OS 和架构
- 当二进制文件与主机不匹配时,提供特定的纯 Go 重建命令
它不会对受检查的文件执行、修改、上传操作,也不会发起网络请求。它不判断文件是安全还是恶意。
## 安装
从 [GitHub Releases](https://github.com/soul-sol/go-exec-format-doctor/releases) 下载适合您平台的归档文件,
使用 `checksums.txt` 进行校验,然后将二进制文件放置在您的 `PATH` 中。
或者使用 Go 1.23 或更新版本从源码构建:
```
go install github.com/soul-sol/go-exec-format-doctor/cmd/go-exec-format-doctor@latest
```
该模块和命令的文档已收录在
[pkg.go.dev](https://pkg.go.dev/github.com/soul-sol/go-exec-format-doctor)。
## 使用
```
go-exec-format-doctor ./my-service
```
不匹配示例:
```
format: elf
target: linux/amd64
host: linux/arm64
verdict: mismatch
summary: elf binary targets linux/amd64 but this host is linux/arm64
next: GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build
```
机器可读输出:
```
go-exec-format-doctor --json ./my-service
```
隐藏可选的进一步帮助链接:
```
go-exec-format-doctor --quiet ./my-service
```
退出代码:
| 代码 | 含义 |
|---:|---|
| `0` | 兼容的二进制文件或有条件可运行的脚本 |
| `1` | 架构/OS 不匹配、归档文件或未知格式 |
| `2` | 无效的 CLI 输入、不可读的路径或输出失败 |
## 结论的含义
- `compatible`:文件头包含当前的 OS 和架构。
- `mismatch`:文件头针对其他的 OS 或架构。
- `conditional`:脚本包含 shebang,但未探测其 interpreter。
- `not-executable`:文件是归档容器。
- `unknown`:文件头被截断、损坏或无法识别。
文件头兼容并不代表在 runtime 下完全保证可用。动态库、
权限、挂载标志、内核特性、CGO 依赖以及 interpreter 的可用性
仍然可能阻止执行。
## 进一步探索
如果您想防止 CI 中的架构不匹配问题,
[售价 29 美元的 Go/Linux 跨架构 CI 入门套件](https://soul-sol.github.io/verified-automation-services/go-cross-architecture-ci-kit.html)
提供了经过测试的 AMD64、ARM64 和 386 工作流、编译报告以及可选的 QEMU
冒烟测试。免费的 doctor 仍然是完整的,并且不需要该套件。
## 开发
```
go test -race -shuffle=on -count=1 ./...
go vet ./...
golangci-lint run ./...
```
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解范围和验证要求。
## 许可证
MIT。详见 [LICENSE](LICENSE)。
标签:EVTX分析, Go, Ruby工具, SOC Prime, 二进制分析, 云安全运维, 开发工具, 日志审计, 系统诊断, 跨平台编译