当前位置: 首页 > 知识库问答 >
问题:

x86汇编:查找在非常技术\特定条件下可能中断的循环示例

范豪
2023-03-14

在我之前的问题(x86汇编:很难找到无限循环挑战的想法)中,有人展示了在非常特定的条件下可以破坏的小代码:

safe: 
    rdrand 
    jc safe

这段代码显然不适用于我正在开发的模拟器,但我真的很喜欢这个想法。所以我想看看是否有人知道任何类似的东西可以在emu8086上运行。谢谢!

共有1个答案

周苑博
2023-03-14

这种“中断”是通过使用运行相同循环的其他内核(或不以RDRAND返回值为条件的内核)耗尽硬件RNG。

这甚至只能在一些具有RDRAND特性的CPU上实现,不包括第一代的IvyBridge。常春藤桥上RDRAND的疲劳特征是什么?

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

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

不过,这些想法对于8086来说仍然毫无用处。它不做SMP,只做单处理器系统。除非您考虑设备中断之类的事情,否则这种想法在8086上都无法奏效。e、 g.对中断控制器进行编程,以频繁触发计时器中断。

 类似资料:
  • 3.4.3 循环的非正常中断 正常的循环总是按“从头到尾再回到头”的方式进行的,但是很多编程语言都提供了在特定条件下打破正常循环方式的语句,目的是在某些情况下可以编写更简单的代码。Python 语言中也提供了这样的语句:break 和 continue。 break 语句 for 或 while 语句的循环体中可以使用 break 语句,其效果是终止本次循环,并将控制跳 出循环语句,转到循环语句的

  • 条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= 18: print 'your age is', age print 'adult' 根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么

  • 我有一个清单,必须找到具体的对象。我必须按学生平均价值排序列表,并创建函数来搜索具有第二高价值的学生。如果与其他学生重复,则按函数返回较小的学生。这个任务的另一个要求(要妥善解决)是我不能创建任何对象。下面我留下了我正在使用的类的代码: 现在,我尝试通过对stream进行反向排序来解决这个问题,然后移除stream的第一个值,并比较stream的两个下一个对象并返回正确的一个。我可以使用for循环

  • 我想将高级语言中的简单循环转换为汇编语言(对于emu8086),比如说,我有以下代码: 或 或 如何在emu8086中执行此操作?

  • 问题内容: 如何在Linux中的多个文件中替换特定术语? 例如,我的目录中有许多文件: file1.txt file2.txt file3.txt 我需要找到一个单词“ searchword”并将其替换为“ replaceword”。 问题答案: 使用bash 4.0,您可以递归搜索文件 或与GNU查找