このコードは私のプロセッサに損害を与える可能性がありますか?

StackOverflow https://stackoverflow.com/questions/2740268

  •  02-10-2019
  •  | 
  •  

質問

友人が私にそのコードを送ってくれて、プロセッサに損害を与える可能性があると主張しています。本当?

void damage_processor() {
    while (true) {
        // Assembly code that sets the five control registers bits to ones which causes a bunch of exceptions in the system and then damages the processor
        Asm(
            "mov cr0, 0xffffffff \n\t"
            "mov cr1, 0xffffffff \n\t"
            "mov cr2, 0xffffffff \n\t"
            "mov cr3, 0xffffffff \n\t"
            "mov cr4, 0xffffffff \n\t"
        )
    }
}

本当?

役に立ちましたか?

解決

ユーザースペースコードから?いいえ。特権の例外を引き起こし、カーネルはプログラムを終了します。カーネルコードから?疑わしい;例外を投げかけているので、問題のコードに戻るために障害ハンドラーを手動でセットアップする必要があります。また、CR3移動の一部が成功した場合にトリプルフォールトを引き起こす可能性が十分にあります。これにより、ページテーブルアドレスを制御し、おそらく命令フェッチ、ハンドラーフェッチ、ダブルフォールトハンドラーのフェッチに障害が発生する可能性があります。 CPUは、それが発生した場合にシャットダウンする必要があります。

システムプログラミングのIntelまたはAMDマニュアルを確認してください。制御レジスタに無効なビットを書き込むときにどの例外がスローされるかを示します。

他のヒント

たぶんあなたがそれを約20年間実行させたなら。

たぶん、このコードによりプロセッサ/システムがロックアップされますが、永久に損害を与える可能性はありません。

これが真実であると想像してみてください。それはすぐにウイルス/トロイの木馬がコンピューターを攻撃したり、検出後に活動を隠すために使用されます。

コードがプロセッサに損傷を与える可能性がある場合でも、プロセッサメーカーは、プロセッサのソフトフィックスのようなものであるいわゆるマイクロコードアップデートを発行できます。このようなマイクロコードアップデートは、オペレーティングシステムおよび/またはBIOS(およびプロセッサメーカー)によって提供され、そのようなコードを実行する前にプロセッサにロードされます。

要約すると、いいえ、あなたの友人はx86/x64プラットフォームについて話していると仮定して、間違っています。

いいえ。ポイントがプロセッサを壊すことを期待してプロセッサを熱心に免除することである場合、コンピューターシステムには、過熱を防ぐために熱ソリューション(ファン、銅の熱交換器、ヒートシンクなど)があります。熱ソリューションが故障した場合、BIOSは#Thermtripを主張してマシンをオフにします。

ペンティウムIでのバグの噂が聞こえました。タイトループに特定の無意味な一連の指示を与えたとき、熱保護がそれを保護できないほど速く単一のフリップフロップを燃やすと聞きました。

私が一度参照したのは、本当に古いCPUであることが実際のモードでこれを行うことで調理できます。

halt:
    jmp short halt

正しいコードはそうでした

halt:
    nop
    jmp short halt

申し訳ありませんが、コードはアームプロセッサで実行されません。

多くのプロセッサでは、ステータスワードを設定するか、プロセッサに影響を与える手順が「スーパーバイザー」モードに制限されています。優れたオペレーティングシステムは、「スーパーバイザー」モードと同じ機能を持たない「保護された」モードでユーザーコードを実行します。ユーザーモードで最新のプロセッサに関する特権的な指示を実行すると、例外が生成されます。

あなたとあなたの友人は、アセンブリ言語参照マニュアルの指示をいつでも調べて、操作を確認できます。

問題のコードは、マシンを再起動する以外に多くのことをする可能性は低いです。私の経験では、ソフトウェアコードを実行することでX86 CPUをレンガにすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top