ユーザー空間で再起動が発生します。

ユーザー空間で再起動が発生します。

このプログラムはx86 LinuxシステムのGnu Assembler用に書かれており、トリプルエラーが発生して再起動されます。

.text
.global _start
_start:
# write our string to stdout

    movl    $len,%edx   # third argument: message length
    movl    $msg,%ecx   # second argument: pointer to message to write
    movl    $1,%ebx     # first argument: file handle (stdout)
    movl    $4,%eax     # system call number (sys_write)
    int $0x80       # call kernel
# Triple Fault -- reboot
    movq    $1, %rsp    # Load the stack pointer with a one
    pushq    %rax       # Push the A register, should cause a triple fault.

# and exit

    movl    $0,%ebx     # first argument: exit code
    movl    $1,%eax     # system call number (sys_exit)
    int $0x80       # call kernel

.data                   # section declaration

msg:
    .ascii  "Will reboot by triple fault!\n"    # our dear string
    len = . - msg           # length of our dear string

代わりに分割エラーが発生します。 rootで実行すると、ユーザーモードで動作させることができますか?

答え1

Linuxカーネルは、ユーザースペースが他のユーザーに影響を与える可能性のある操作を実行することを許可しません。ルートとして同様の操作を実行できますが、カーネルは依然としてそのような直接制御を防ぐことができます。結局のところ、ルートプロセスはまだユーザーモードプロセスですが、カーネルのシステムコールに無制限にアクセスできます。

より正確な/UNIXyアプローチは、カーネルでこれを行い、ユーザー領域プロセスがそれを呼び出すために使用できるインターフェースを公開することです。これにより、コードはカーネルのコンテキスト内で実行され、ユーザーが通常アクセスできないハードウェア/システム機能へのフルアクセス権を持ちます。

答え2

これらのCPUエラーはカーネルモード割り込みハンドラによって処理されます。カーネルコードは問題ありません。ユーザースペースエラーが発生した場合(たとえば、0で割ったり、誤ったメモリアクセス)、最初の割り込みハンドラはそれを正しく処理する必要があります。他のすべてはカーネルのバグです。割り込みハンドラに欠陥がある場合、基本的に唯一合理的な方法は、レジスタとスタックをダンプしてから、デバッガ(OpenBSDが実行するものなど)またはHCFに入れることです。パニックニュースを記録してください。その時点で、コードが正常に機能しなくなったため、トリプルエラーが発生します。

要約:これを機能させるには、Linuxのトラブルシューティングコードでバグを見つけなければなりません。

意図的に割り込みハンドラを中断するカーネルモジュールでこれを行うことができますが、システムがクラッシュする可能性もあります。効果が異なりますshutdown -r now

答え3

rebootLinuxではシステムコールを使用できます。

#include <unistd.h>
#include <sys/reboot.h>

int main(void) {
    return reboot(LINUX_REBOOT_CMD_RESTART);
}

答え4

私は本当にアセンブラ(?!)が必要な場合はrootで動作しました(私の考えにはnasmを使います)。

BITS    32
    mov eax, 88
    mov ebx, 0xfee1dead
    mov ecx, 85072278
    mov edx, 0x01234567
    int  0x80

関連情報