当前位置: 首页 > news >正文

超小可执行文件再探:从45字节到76字节,合规与精简的艰难平衡!

再探超小可执行文件

曾有人评论,最初创建的文件并非真正的 ELF 可执行文件,只是 Linux 内核“误认”的文件。这观点有道理,45 字节的文件不符合 ELF 规范,但怎能在发现更多可能性时停手呢?不过,为满足纯粹主义者和内心的完美主义,作者撰写了续作。

严格遵循标准下的文件精简

已将可执行文件精简到 45 字节,现在希望严格遵循标准并保持小巧。偏离正轨是从摆弄 ELF 头“未使用”字段开始,于是回到之前状态,得到 91 字节的版本。但这不是最小尺寸,将 ELF 头和程序头表重叠 8 字节,文件大小缩减到 83 字节。

继续缩减文件大小的尝试

似乎没什么可做了,无奈回头看 ELF 规范。发现初始寄存器中只有 edx 有相关说明,但无实质性保证。接着发现程序头表结构中的 p_paddr 字段内容“未指定”,有 4 个字节可利用,将其中 2 个字节放 jmp 指令,剩余 2 个字节放程序第一条指令,文件大小变为 81 字节。

尝试将 jmp 指令和 p_filesz 字段重叠不可行,考虑 p_paddr 字段之前的字段,发现“mov bl, 42”指令可接受,调整加载地址和代码,文件大小降到 79 字节。想再腾出 1 个字节放“inc eax”指令,尝试让程序最后一个字节溢出到下一个字段不可行,但发现 p_filesz 和 p_memsz 字段可互换,文件大小降到 76 字节。

此版本缺点是程序请求大量内存,但实际不访问,没造成危害。使用“cmp eax, imm32”指令,以一半“代价”跨越 p_filesz 值,将递增指令移出 p_memsz 字段,该字段值更合理。这是最终版本,大小 76 字节,为符合规范多付出 31 字节代价。

是否让纯粹主义者闭嘴?

一部分人闭嘴了,但仍有人指责 int 指令。直接系统调用并非与内核文档化接口的一部分,系统调用号在未来版本可能改变,虽基本功能这种情况极不可能发生,但类似情况出现过,如 uname 函数的系统调用。

若想完全合规,需严格遵循文档化的 ABI,使用 _exit 函数退出程序,这意味着重新引入动态链接开销。要了解 ELF 二进制文件动态链接实现方法,自己实现(希望占用更少空间)并非易事,只好留到下一篇文章讨论。

http://www.jsqmd.com/news/1076396/

相关文章:

  • 3D模型文件预览难题?Space Thumbnails让Windows资源管理器变身高效设计助手
  • uvloop:让 Python 异步性能翻倍的底层方案
  • 【VMware部署GitLab终极指南】:20年运维专家亲授高可用架构设计与避坑清单
  • 新疆建筑建材厂家怎么选?这份指南挺靠谱
  • 如何3分钟实现Windows与Office永久激活:KMS_VL_ALL_AIO终极指南
  • PHP反序列化漏洞:从原理到实战利用与防御
  • 终极免费方案:5分钟彻底告别Spotify广告的完整指南
  • 终极Windows老游戏兼容解决方案:5分钟让经典游戏在Win10/11完美运行
  • Markdown Viewer浏览器插件:三分钟解决技术文档阅读难题
  • WebAPI安全实战:从认证授权到注入防御的纵深防护体系
  • 实战指南:如何用YOLOv8 AI自瞄技术提升FPS游戏竞技水平
  • Unlag Neo:解决 Macbook Neo 光标卡顿问题,低 CPU/GPU 占用的实用方案!
  • 2026实习会议转写工具实测盘点 | 筛选后值得用的几款
  • Django毕设选题推荐:基于 Django 的智能化就业信息发布推荐系统设计与实现 基于 Django 的高校就业数据智能推荐管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】
  • FanControl终极指南:5步打造完美静音的Windows风扇控制系统
  • AI与大模型新闻日报 | 2026-06-25
  • 私域拓客两难怎么破?合规稳步加人,再也不怕账号受限
  • 模板驱动型文档自动化:从重复劳动到逻辑封装的工程实践
  • STM32-S146二维码付+4种商品+4路电机出货+选货+手付+库存+缺货提醒+找零+声光提醒+按键+TFT彩屏+(无线方式选择)-1(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • LoRA微调实战:笔记本跑通大模型的原理与避坑指南
  • 最小二乘问题详解21:稀疏GCP约束下的自由网平差与弱约束融合
  • 3步搞定!Deepin Boot Maker:Linux启动盘制作新手指南
  • 免部署的AI教学平台哪家性价比高?看实战云的SaaS模式
  • FMPy:工业级FMU仿真引擎的Python实现
  • 专业的GEO机构服务
  • 云服务器不是买来就完事:一篇讲清“长期可用性”的实战指南
  • 探秘 Lithp:John McCarthy 原始 Lisp 语言解释器代码与运行机制全解析
  • 编译 llvm 的 libc++
  • Jeecg-Boot积木报表权限绕过漏洞深度剖析与修复指南
  • 技术迭代升级,GPT-Image-2领跑商用生图赛道