是否有可能对收集统计信息的所有十六进制操作码进行写测试以找到未记录的功能?

时间:2012-12-27 12:26:46

标签: assembly

所有可能更改的统计信息(端口标志regs中断异常等)并将其写入数组(查看和比较)。它计算操作码的长度等等。

可能存在这样的标准测试,例如测试任何给定的处理器。并且没有特别需要无法识别的功能的“魔法揭示”,你可以在网上进行。

1 个答案:

答案 0 :(得分:4)

您没有提到要定位的处理器类型。这个答案来自x86的观点,但是其他架构的任务可能也类似。

首先,什么会限制你编写和运行这样的程序?如果您具有root访问权限(可以在x86术语中运行ring0代码),则可以执行以下操作:

  1. 挂钩所有必要的中断(或者你可以挂钩所有中断)。
  2. 生成说明。
  3. 将指令代码写入存储器(可能有不同的指令长度)。
  4. 在指令后写一个jmpcallintint3(在x86处理器中,在其他架构中,说明会有所不同)。
  5. 跳转到指令,执行或导致中断。如果它被执行,在它之后你将跳转或调用处理代码。如果它导致中断,请从堆栈中检查cs:ip(以了解指令失败的地址),您所处的中断等,然后跳转或调用处理代码。
  6. 然后,在处理代码中,将您想要的所有数据(我认为至少是所有寄存器)发送到某个外部端口,然后在另一台计算机上将所有数据存储在磁盘上。

    1. 然后生成下一条指令。
    2. 除非您已经处理了所有说明,否则请跳至3。
    3. 但是,在x86的情况下,允许的最大指令长度为15个字节。 256 ^ 15 = 1.33 * 10 ^ 36。宇宙的年龄是~4.339 * 10 ^ 17秒。假设10.0 GHz处理器具有单核,每个时钟恰好1个指令(尝试报告它),则需要超过3亿个这样的处理器才能在比当前时间更短的时间内测试所有15字节指令。宇宙:

      (256^15)/(10*10^9)/(4.339*10^17) = 306344317
      

      当然,你也需要相当多的存储空间。