我正在尝试在64位上运行一些asm行(Ubuntu 12.04) 只是为了执行reboot syscall。 我可以编译它,但是当没有任何事情发生时。
以下是代码:
section .text
global _start
_start:
mov eax,88
mov ebx,0xfee1dead
mov ecx,672274793
mov edx,0x89abcdef
mov esi,0
int 0x80
我使用以下方法编译它:
nasm -f elf reboot.asm
然后我用:
链接它ld -m elf_i386 -s -o reboot reboot.o
我对此行为有一些疑问:
答案 0 :(得分:0)
需要超级用户才能使用此系统调用。您可以以root身份提供文件超级用户权限,“chown root:root myfile”,“chmod + s myfile”。
您可能希望在int 80h
之后检查错误代码(如果有)...
int 80h
test eax, eax
jns good ; shouldn't happen for sys_reboot
neg eax
mov ebx, eax
mov eax, 1 ; __NR_exit
int 80h
int 80h
test eax, eax
jns good ; shouldn't happen for sys_reboot
neg eax
mov ebx, eax
mov eax, 1 ; __NR_exit
int 80h
现在通过“echo $?”,您应该能够看到错误号。在errno.h中查找。
我认为在esi中零是可以的。 Dunno,如果它能在64位系统上工作 - “应该”,我想。
如果有效,则会导致“提示”重启 - 与拔插头一样。它与“reboot”shell命令不同!我觉得这不是我想做的......