You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:可执行Mach-O文件的最小有效大小阈值

确定Mach-O文件的最小可执行大小阈值

要给你的文件迭代器加基于大小的快速检查,得先从Mach-O的核心结构拆解计算理论上的最小可执行文件尺寸——毕竟低于这个尺寸的文件,哪怕有正确的魔术前缀(0xfeedface/0xfeedfacf),也不可能被系统加载执行。

核心结构拆解

一个可执行的Mach-O必须包含:

  • 合法的Mach-O头(区分32位/64位架构)
  • 至少一个加载命令,指向带有可执行权限的段
  • 段内至少有一段可执行代码(哪怕是最简短的指令)

分架构的最小阈值计算

1. x86_64(64位Intel)

  • Mach-O头(mach_header_64):32字节
  • 一个LC_SEGMENT_64加载命令,包含1个__text节:
    • segment_command_64结构占72字节,加上1个section_64结构(80字节),总共152字节
  • 最简短的可执行指令(ret,1字节)
    总计:32 + 152 + 1 = 185字节

2. arm64(64位Apple Silicon)

arm64的指令是4字节对齐的,最简短的退出指令(ret对应0xd65f03c0)占4字节:

  • Mach-O头:32字节
  • LC_SEGMENT_64+__text节:152字节
  • 4字节指令
    总计:32 + 152 + 4 = 188字节

3. 32位x86

  • Mach-O头(mach_header):28字节
  • LC_SEGMENT加载命令+1个__text节:56 + 60 = 116字节
  • 1字节ret指令
    总计:28 + 116 + 1 = 145字节

实际快速检查建议

作为快速过滤的阈值,你可以把数值稍微往上取整,避免边缘情况:

  • 针对单架构Mach-O,设为200字节——低于这个值的文件直接排除,不用再做后续结构解析
  • 针对Fat Mach-O(多架构打包),因为要包含至少两个完整的单架构Mach-O,阈值可以设为400字节

这个阈值是理论最小值,实际中的可执行Mach-O(哪怕是最简单的Hello World)都会远大于这个尺寸,所以用它做前置过滤完全不会误判合法文件。

额外注意点

  • 如果文件只有Mach-O头+加载命令但没有可执行代码,系统会返回exec format error,这类文件也属于“不可运行”,所以你的阈值必须包含至少1/4字节的代码部分
  • 魔术前缀只是格式标识,不代表结构合法,大小检查能帮你快速排除大量无效文件,节省后续解析的资源

内容的提问来源于stack exchange,提问作者Zohar81

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:13