Assembly 在x86_64上运行i_386 asm:重新启动指令

Assembly 在x86_64上运行i_386 asm:重新启动指令,assembly,x86-64,behavior,Assembly,X86 64,Behavior,我正在尝试在我的64位(Ubuntu 12.04)上运行一些asm行 只是执行重新启动系统调用。 我可以编译它,但是当运行时什么都没有发生 代码如下: section .text global _start _start: mov eax,88 mov ebx,0xfee1dead mov ecx,672274793 mov edx,0x89abcdef mov esi,0 int 0x80 我使用以下方法编译它: nasm -

我正在尝试在我的64位(Ubuntu 12.04)上运行一些asm行 只是执行重新启动系统调用。 我可以编译它,但是当运行时什么都没有发生

代码如下:

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
然后我使用以下链接:

nasm -f elf reboot.asm
ld -m elf_i386 -s -o reboot reboot.o
我对这种行为有一些疑问:

  • 如果我正确使用它,那么在64位系统上运行这个32位代码是问题的根源吗
  • 我想知道如何将NULL传递给%esi寄存器,对于重新启动系统调用,此参数是否错误

必须是超级用户才能使用此系统调用。您可以授予文件超级用户权限。。。作为root,“chown root:root myfile”,“chmod+s myfile”

您可能需要在any
int 80h
之后检查错误代码(如果有)。。。

现在通过执行“echo$?”,您应该能够看到错误号。在errno.h中查找

我认为esi中的零是可以的。不知道它是否能在64位系统上工作,我想“应该”


如果它工作,这将导致“提示”重新启动-与拔掉插头相同。它与“reboot”shell命令不同!我决定这不是我真正想做的…

我已经在使用sudo了。我发现读取重新启动程序时出错。我现在使用的edx中的标志是0x1234567,它可以工作!