getpid из системного вызова с 32-битным приложением и ядром на снежном барсе - PullRequest
0 голосов
/ 14 мая 2010

Я успешно вызвал системный вызов выхода из сборки, но мне трудно вызвать системный вызов _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 голосов
/ 31 мая 2010

Это потому, что 39 - это код для getppid - get parent id процесса, и это то, что вы получаете как 4056. Код getpid равен 20, но, пожалуйста, посмотрите на / usr / include / sys / syscall.h для значения SYS_getpid как точной константы, используемой в вашей системе.

Также я не уверен, почему вы хотите, чтобы в стеке было 8 байт, прежде чем вызывать getpid через прерывание. Это ни на что не влияет и просто бесполезно, нет?

...