2013-02-22 37 views
-1

我試圖跑在我的64位幾ASM行(Ubuntu的12.04) 只是爲了執行系統調用重啓。 我可以編譯它,但是當運行什麼都不會發生。運行i_386 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 

我有一個關於這種行爲的一些問題:

  • 如果我正確使用它,是在64位系統上運行這個32位代碼的問題的由來?
  • 我想知道將NULL傳遞給%esi寄存器,這個參數對於重新啓動系統調用是否錯誤?

回答

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 

現在做「回聲$?」,你應該能夠看到的錯誤號。在errno.h中查找它。

我覺得在ESI零是好的。不知道它是否可以在64位系統上運行 - 我認爲「應該」。

如果成功,這將導致一個「提示」重新啓動 - 一樣拔插頭。它與「rebo​​ot」shell命令不一樣!我決定這是不是真的是我想做的事......

+0

我已經使用sudo。我發現錯誤是閱讀重新啓動的人。在我現在使用的edx中的標誌是0x1234567,它的工作原理! – Tezirg 2013-02-23 19:37:06