加载失败
原文作者用 Zig(一个系统编程语言)和 Capstone(一个反汇编库)对海量随机字节流做批量解压与反汇编实验,目的是展示随机数据中也会出现可被解析为指令的现象。评论围绕实验观测的统计数据(例如 4.4% 可反汇编、4.0% 可被 Static Huffman 解码、1.2% 同时满足两者导致约 30% 的条件概率)以及解码/反汇编过程如何改变输入与输出分布展开分析。关键前提包括:样本为 128 字节,解码器通常不会消耗全部输入;以及反汇编器按字节解释 opcode/操作数而不做高层语义校验。作者的 AI 使用披露也被讨论,评论同时涉及透明度与对 LLM 写代码能力的不同看法。
评论注意到关键统计:4.4% 的随机数据可反汇编,4.0% 可被 Static Huffman 解码,且只有 1.2% 同时满足解压与反汇编。相对 4.0% 的解压成功率,1.2% 意味着已解压产出中约 30% 能被反汇编,这引发对条件概率的质疑。补充的测试细节提到样本为 128 字节、40M 次“success”和 570 次“end of stream”,推断在数十亿次测试中几乎不读满全部 128 字节。基于对 static Huffman 表的估算,每个符号约 80% 概率输出字节、18% 崩溃、1% 重复、1% 提前结束,解压通常消耗很少输入并产生轻微重排与重复,这种选择性消费和输出分布能解释为何解压后的数据更容易被反汇编。
多位评论者从逆向经验解释为什么数据区会被误解为代码:CPU 指令的 opcode 编码非常密集且通常没有对“错误编码”的冗余检查,因此任意字节块都可能被当作指令与立即数解析。反汇编器会把相邻字节拉进操作数并跳过对应长度,操作数字段的任意位模式不会提示“这是无效指令”。实际例子包括字符串或数据被解析为重复的 or/add 指令,短字节序列如“00 00” 也会被解读为 add [rax], al。这种编码层面的宽容性说明了为什么大量随机字节能产生看似合理的指令序列,而不能据此认为那是真正的可执行代码。
评论围绕作者在文章里加入的 AI 使用披露展开讨论;作者解释披露是为了让读者知道错误属于作者本人且此次未使用 AI,并表示未来若使用会如实说明。其他评论认为披露有实际作用,因为现在读者会关心工作是否由 LLM 辅助,披露能直接回答这个疑问。也有评论质疑把 LLM 比作“演员”的类比在代码生成上不恰当,认为 LLM 在写可运行代码方面已经相当有效。总体讨论既涉及对透明度的支持,也反映出对 LLM 编程能力的分歧与信任问题。
有人指出该文章在一周内已被重复发布第三或第四次,认为这造成版面噪音。回复中提供了指向该站点发布列表的链接以证明重复发布事实。该话题主要是对发布频率与内容再帖的提醒,而非技术争论的核心。
Static Huffman: Static Huffman(静态哈夫曼编码):使用固定哈夫曼码表的压缩方式(例如 DEFLATE 的 static Huffman tables)。在解码时输入必须与固定表匹配,否则会出现崩溃、重复输出或提前结束,因此影响解压成功率和输出分布。
disassemble / 反汇编: 将机器码字节流翻译为汇编指令的过程。反汇编器按字节流解释 opcode 与操作数,缺乏语义校验,因此任意字节序列常能被解析成看似有效的指令序列,导致“数据被误判为代码”。
opcode encoding / 操作码编码: CPU 指令的二进制表示格式,包含操作码、操作数和立即数字段。许多指令集的编码密集且可变长度,操作数字段可为任意位模式,这种无冗余的编码特性使随机字节更容易被解释为合法指令。