不同架构的二进制文件中的字节频率?

逆向工程 二元分析 二进制 二进制格式
2021-06-18 09:14:40

我在找什么

我有一个二进制文件,出于各种原因,我很确定它是可执行的机器代码(虽然可能用于 VM 语言,但我怀疑它是 Java)。我正在寻找字节值与体系结构的字节频率表。

我认识到这些值会因编译器、操作系统 ABI/API、应用程序和二进制格式而异,但出于我的目的,我假设它们因架构而异,并且:

  • 我只需要实际可执行代码的频率.text- 部分 - 而不是整个二进制文件。
  • 该二进制文件针对 1985 年至 2005 年间最常见的最终用户操作系统之一(因此,旧式 unices、Linux、VMS、DOS、Windows NT、MacOS 或 OSX)。
  • 它是在这些系统的最常见编译器上使用默认标志编译的

如果所有这些都失败了,我至少想要一个nop所有最常见架构操作码列表,因为我认为假设大多数编译器使用 nops 进行填充可能是公平的,并且 nops 的运行将帮助我找出一个好的条目反汇编器的要点是。 等等,维基百科上这个列表谢谢你,维基百科。

我的用例

我有一个二进制文件的片段,我很确定它是可执行的目标代码(没有标题/部分信息。我认为它是.text原始格式部分(或任何你称之为)。

不确定它是否来自二进制文件,但是当转换为灰度位图时,它有一些清晰的图案(定期出现条纹),我注意到这些字节FF FF出现的频率足够高,并且在表单中的其他字节旁边Fx,我觉得我正在查看高内存地址。香农熵足够低,我很确定它没有被压缩或加密(大约 7.76),但表示了所有 256 个可能的字节值。

由于个人原因,我实际上无法提供 hexdump 本身。

1个回答

假设这确实是完全没有数据的可执行代码(请注意,.text 部分曾经包含现在转到 .rodata 的内容),字节 FF 和其他 Fx 也可能是反向分支(循环)的相对地址的一部分. 如果您看到明显的条纹,则表明最小。指令大小可能大于 1 个字节,因此 Intel 可能已出局。你能判断条纹是规则的还是有子模式?如果是前者,它可能是类似于 SPARC 或 MIPS 的 RISC 架构(所有指令都是 4 字节长),否则它是某种类似于 PDP-11 的指令集(所有指令都是偶数长度,但它有所不同)。在缩小领域之后,您必须进行基于字的分析,因为在大多数基于字的指令格式的体系结构中,操作码不是字节对齐的。