源程序:
#include <syscall.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
int main(void){
long id1,id2;
id1 = syscall(SYS_getpid);
printf("syscall(SYS_getpid)=%ld/n",id1);
id2 = getpid();
printf("getpid()=%ld/n",id2);
return 0;
}
汇编代码:
0x080483d4 <main+0>: push %ebp
0x080483d5 <main+1>: mov %esp,%ebp
0x080483d7 <main+3>: sub $0x8,%esp
0x080483da <main+6>: and $0xfffffff0,%esp
0x080483dd <main+9>: mov $0x0,%eax
0x080483e2 <main+14>: add $0xf,%eax
0x080483e5 <main+17>: add $0xf,%eax
0x080483e8 <main+20>: shr $0x4,%eax
0x080483eb <main+23>: shl $0x4,%eax
0x080483ee <main+26>: sub %eax,%esp
0x080483f0 <main+28>: sub $0xc,%esp
0x080483f3 <main+31>: push $0x14
0x080483f5 <main+33>: call 0x80482fc #调用syscall
0x080483fa <main+38>: add $0x10,%esp
0x080483fd <main+41>: mov %eax,0xfffffffc(%ebp) #获取syscall的返回值
0x08048400 <main+44>: sub $0x8,%esp
0x08048403 <main+47>: pushl 0xfffffffc(%ebp)
0x08048406 <main+50>: push $0x8048518
0x0804840b <main+55>: call 0x804831c #调用printf
0x08048410 <main+60>: add $0x10,%esp
0x08048413 <main+63>: call 0x80482ec
0x08048418 <main+68>: mov %eax,0xfffffff8(%ebp) #获曲getpid的返回值
0x0804841b <main+71>: sub $0x8,%esp
0x0804841e <main+74>: pushl 0xfffffff8(%ebp)
0x08048421 <main+77>: push $0x8048531
0x08048426 <main+82>: call 0x804831c #调用printf
0x0804842b <main+87>: add $0x10,%esp
0x0804842e <main+90>: mov $0x0,%eax
0x08048433 <main+95>: leave
0x08048434 <main+96>: ret