【发布时间】:2023-03-30 16:12:01
【问题描述】:
以下应用程序在执行时会生成一个分段错误:
.set __NR_reboot, 169
.set LINUX_REBOOT_CMD_POWER_OFF, 0x4321FEDC
.section .text
.globl _start
_start:
movl $LINUX_REBOOT_CMD_POWER_OFF, %ebx
movl $__NR_reboot, %eax
int $0x80
这是一个非常简单的应用程序,我一定遗漏了一些非常明显的东西。有人可以帮我吗?
编译时使用:
as shutdown.s -o shutdown.o
ld shutdown.o -o shutdown
编辑:
即使是只调用系统调用 sync() 的简单应用程序也会产生分段错误:
.set __NR_sync, 36
.section .text
.globl _start
_start:
movl $__NR_sync, %eax
int $0x80
movl $1, %eax #syscall exit
movl $0, %eax
int $0x80
【问题讨论】:
-
第二个
movl不应该是%ebx吗? -
@user786653 完美。将其添加为答案,以便我投票。
标签: linux assembly segmentation-fault gnu shutdown