来自系统调用的getpid,32位应用程序和雪豹内核

时间:2010-05-14 12:47:58

标签: macos kernel system-calls

我成功调用了程序集中的退出系统调用,但我正在努力调用_getpid系统调用并使用它的返回值。这是我正在使用的代码

.text
.globl _getpiddirect

_getpiddirect:
    pushl %ebp
    movl %esp, %ebp
    subl $8, %esp
    movl $39, %eax
    int $0x80
    addl $8, %esp
    popl %ebp
    ret

#include <stdio.h>
#include <unistd.h>

extern unsigned long getpiddirect();

int main(int argc, const char *argv[])
{
   printf("%lu\n", getpiddirect());
   printf("%lu\n", (unsigned long) getpid());
   return 0;
}

getpiddirect一直返回4056。

1 个答案:

答案 0 :(得分:0)

多数民众赞成因为39是getppid的代码 - 获取进程ID,这就是你得到的4056. getpid代码是20,但请查看/ usr / include / sys /syscall.h将SYS_getpid的值作为系统上使用的精确常量。

此外,我不确定为什么在通过中断调用getpid之前需要在堆栈上使用8个字节。它不会影响任何东西,只是没用,不是吗?