GNU/Linux >> Linux の 問題 >  >> Linux

Sudoがカーネルを破壊するプログラムの場合、何が得られますか?

sudoer にとって、それがいかに簡単であるかが突然私に思い浮かびます。 カーネルをクラッシュさせるために、私は次のようなことを試みました:

#include<stdio.h>

int main(){
    printf("hello world");
    int a;
    printf("%p", &a);
    int *p = (int*)0xffff000000000000; //x86_64, somewhere in the kernel space
    printf("%p:%d", p,*p);
    *p = 1;
    printf("%p:%d", p,*p);
}

当然のことながら、sudoなし 、プログラムを実行すると、セグメンテーション違反が発生します。 ただし何もありません sudo ./a.outを介して実行する場合 ! hello worldでさえ 最初の行は、エラーや警告なしで抑制されます。

誰かが何が起こっているのか説明できますか?

承認された回答:

もちろん、カーネルがクラッシュすることはありません。realではなく、独自のプログラムの仮想メモリ空​​間に書き込んでいます。 カーネルメモリスペース。

仮想メモリの詳細については、こちらをご覧ください

追伸:

なぜprintf 何も印刷しませんか?デフォルトでは、標準出力はラインバッファリングされ、hello world 行区切り文字は含まれていません。

したがって、プログラムがクラッシュした場合、その出力は観察されません(putsを使用してみてください または\nを追加します メッセージ内)


Linux
  1. Sigkillシグナルが送信された場合、プログラムは何をしますか?

  2. スレッドが分岐するとどうなりますか?

  3. 画面のロックが解除されるたびにUbuntuにプログラムを自動的に実行させるにはどうすればよいですか?

  1. Linux –Linuxデスクトップがフリーズした場合の対処方法

  2. 実装時のループデバイスとは?

  3. zImage、rootfsとは

  1. Linux – Linuxカーネルの実行中にハードドライブに障害が発生した場合はどうなりますか?

  2. Sudo Echo「xyz」の出力をファイルにリダイレクトするときに「permissionDenied」を取得しますか?

  3. カーネル Linux サーバーの基礎となるものは?