TheBinary:哈希自指通用二进制程序
这个标题很长,其实是两个有意思的东西拼接起来:
- 通用二进制程序:通过设计二进制内的header、code段结构,让不同系统、不同架构、不同解析器能够运行同一个二进制程序。
- 哈希自指(Hashquine):一种能够输出自身Hash值的程序。
本项目就是想要把二者结合起来,做出一个能够在复数个平台上运行的单一程序,输出自身的Hash。但仅仅这样,其实还不够有趣,因此再引入其他约束:
- 预知,二进制内预先以某种方式保存自身Hash。
- 精简,维持二进制体积在一个较小的尺寸上。
- 复用,不允许程序内出现多个Hash值副本,有且仅有一个数据源。
通用二进制构建
这实际上是一个筛选与决策的过程,在头脑风暴找到的运行环境上分析比较其对于可执行文件格式的假设,寻找出一个能够同时满足尽可能多环境要求的二进制格式,在其上构建stdio输出。
当前构件的空间布局
下面按文件内的实际偏移展示这份 1 MiB 构件。有色部分是已保留区域,底色是可用空档;各格式可以复用同一字节,因此下面的区域条不能相加。
