section .text
global start
start:
mov eax, 29
int 80h
ret
我很确定pause(void)
是系统调用29,为什么这会给我Bus error: 10
?
答案 0 :(得分:2)
#define SYS_recvfrom 29
我猜想recvfrom
需要一些其他参数,给你一个buss错误。
如果您实际上是在尝试致电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