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