Assembly 在x86_64上运行i_386 asm:重新启动指令
我正在尝试在我的64位(Ubuntu 12.04)上运行一些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 -
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寄存器,对于重新启动系统调用,此参数是否错误
int 80h
之后检查错误代码(如果有)。。。
现在通过执行“echo$?”,您应该能够看到错误号。在errno.h中查找
我认为esi中的零是可以的。不知道它是否能在64位系统上工作,我想“应该”
如果它工作,这将导致“提示”重新启动-与拔掉插头相同。它与“reboot”shell命令不同!我决定这不是我真正想做的…我已经在使用sudo了。我发现读取重新启动程序时出错。我现在使用的edx中的标志是0x1234567,它可以工作!