x86 程序集:寻找在 technical\specific 条件下可能中断的循环示例

x86 assembly: Looking for examples of loops that can break under very technical\specific conditions

在我之前的问题 (x86 Assembly: Having hard time finding ideas for an infinite loop challenge) 中,有人展示了这段可以在非常特定的条件下破解的小代码:

safe: 
    rdrand 
    jc safe

此代码显然不适用于我正在使用的模拟器,但我真的很喜欢这个想法。所以我想看看是否有人知道与在 emu8086 上工作的类似的东西。谢谢!

这 "breaks" 通过使用其他内核耗尽硬件 RNG 运行 宁同一个循环(或一个不以 RDRAND return 值为条件的循环)。

这甚至只能在某些具有 RDRAND 功能的 CPU 上实现,不包括具有它的第一代 IvyBridge。 What are the exhaustion characteristics of RDRAND on Ivy Bridge?

emu8086 模拟单核 8086,因此没有多个内核可以同时 运行。它也没有任何类似的共享资源。我认为没有类似的等价物。

除了 RDRAND,现代 x86 可能 运行 一个时间敏感的循环,它检查背靠背 rdtsc 结果之间的间隔(时间戳计数器),或者使用rdtsc 计算 imul 长链的延迟时间。然后来自同一物理核心上的另一个逻辑核心(超线程)的竞争可能会破坏它。那会给你同样的资源共享效果。甚至争用原子地增加内存位置可能对物理内核之间的争用很敏感。

虽然这些想法对 8086 仍然没有用。它不做 SMP,只做单处理器系统。甚至 这个想法都不能在 8086 上工作,除非你考虑设备中断之类的事情。例如对中断控制器进行编程以非常频繁触发定时器中断。