在OSX中调用Pause时出现总线错误

时间:2014-01-26 17:57:53

标签: macos assembly

section .text 
  global start

start:
  mov eax, 29
  int 80h
  ret

我很确定pause(void)是系统调用29,为什么这会给我Bus error: 10

1 个答案:

答案 0 :(得分:2)

根据sys/syscall.h

#define SYS_recvfrom       29

我猜想recvfrom需要一些其他参数,给你一个buss错误。


如果您实际上是在尝试致电pause(void),那么粗略地检查来源似乎表明定义类似于以下内容:

syscalls.h

#define SYS_sigsuspend     111

sigsuspend.c

int
sigsuspend (
            const sigset_t *sigmask_p
)
{
    sigset_t    mask;

    if (sigmask_p)
        mask = *sigmask_p;
    else
        sigemptyset(&mask);
    return syscall (SYS_sigsuspend, mask);
}

sigcompat.c

int sigpause(mask)
    int mask;
{
    return (sigsuspend((sigset_t *)&mask));
}

sigpause.c

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

相关联