0
section .text
global start
start:
mov eax, 29
int 80h
ret
呼籲暫停時,我敢肯定,pause(void)
是系統調用29,所以這是爲什麼給我Bus error: 10
?總線錯誤在OSX
section .text
global start
start:
mov eax, 29
int 80h
ret
呼籲暫停時,我敢肯定,pause(void)
是系統調用29,所以這是爲什麼給我Bus error: 10
?總線錯誤在OSX
#define SYS_recvfrom 29
我猜recvfrom
需要一些其他的參數,讓您的總線錯誤。
如果你實際上是試圖調用pause(void)
,源的粗略研究似乎表明,這些定義是類似以下內容:
syscalls.h
:
#define SYS_sigsuspend 111
int
sigsuspend (
const sigset_t *sigmask_p
)
{
sigset_t mask;
if (sigmask_p)
mask = *sigmask_p;
else
sigemptyset(&mask);
return syscall (SYS_sigsuspend, mask);
}
int sigpause(mask)
int mask;
{
return (sigsuspend((sigset_t *)&mask));
}
int
pause()
{
return sigpause(sigblock(0L));
}
所以,雖然pause(void)
可以不帶任何參數,系統調用肯定不會。
要調用pause(void)
從組裝,帶libc
鏈接:
example.asm:
section .text
global start
start:
call pause
ret
編譯as -o example.o example.asm
和鏈接與gcc -static -o a.out example.o
所有文檔(HTTP:// www.tutorialspoint.com/unix_system_calls/pause.htm)我已經看到雖然說,暫停不會採取任何額外的參數? – sircodesalot
@sircodesalot,暫停不是系統調用,您可以通過中斷觸發它。這是一個系統調用,它在libc中。此外,您列出的系統調用與我可以找到的OS X版本的'pause'沒有任何關係。 – Mitch
'暫停不是系統調用,您可以通過中斷觸發它。如何在沒有中斷的情況下觸發系統調用?此外,這裏列出了「暫停」調用(http://asm.sourceforge.net/syscall.html),前言爲:「這些不是libc'系統調用',而是Linux Kernel提供的實際系統調用。」難道OSX實際上不支持這個調用嗎? (但爲什麼它會在C中工作?) – sircodesalot