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

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

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

おすすめ記事