所有可能更改的统计信息(端口标志 regs 中断异常等)并将其写入数组(以查看和比较)。它计算 opcode ...etc 的长度。
可能存在这样的标准测试,例如测试任何给定的处理器。并且没有特别需要未记录功能的“神奇发现”,您可以在网上找到它们。
所有可能更改的统计信息(端口标志 regs 中断异常等)并将其写入数组(以查看和比较)。它计算 opcode ...etc 的长度。
可能存在这样的标准测试,例如测试任何给定的处理器。并且没有特别需要未记录功能的“神奇发现”,您可以在网上找到它们。
您没有提及您要定位的处理器类型。这个答案是从 x86 的角度来看的,但在其他架构中,这个任务可能也很相似。
首先,什么会限制你编写和运行这样的程序?如果您在计算机上具有 root 访问权限(可以在 x86 术语中运行 ring0 代码),您可以执行以下操作:
jmp
, call
, int
or int3
(在 x86 处理器中,在其他体系结构中,指令会有所不同)。cs:ip
从堆栈中检查(以了解指令在哪个地址失败),您处于哪个中断等,然后跳转或调用处理代码。然后,在处理代码中,将您想要的所有数据(至少所有寄存器,我想)发送到某个外部端口,然后在另一台计算机上将所有数据存储在磁盘上。
但是,在 x86 的情况下,允许的最大指令长度为 15 个字节。256^15 = 1.33 * 10^36。宇宙的年龄约为 4.339 * 10^17 秒。假设一个 10.0 GHz 处理器具有单核,每个时钟恰好 1 条指令(尝试并报告它),您将需要超过 300 000 000 个这样的处理器才能在比当前时代更短的时间内测试所有 15 字节指令宇宙:
(256^15)/(10*10^9)/(4.339*10^17) = 306344317
当然,您也需要相当多的存储空间。