(gdb) disassemble main
Dump of assembler code for function main:
0x0000000000400564 <+0>: push %rbp
0x0000000000400565 <+1>: mov %rsp,%rbp
0x0000000000400568 <+4>: sub $0x10,%rsp
0x000000000040056c <+8>: movq $0x0,-0x8(%rbp)
0x0000000000400574 <+16>: mov $0x0,%eax
0x0000000000400579 <+21>: callq 0x400460 <getpid@plt>
0x000000000040057e <+26>: cltq
0x0000000000400580 <+28>: mov %rax,-0x8(%rbp)
0x0000000000400584 <+32>: movabs $0x9184e72a000,%rdi
0x000000000040058e <+42>: mov $0x0,%eax
0x0000000000400593 <+47>: callq 0x400470 <sleep@plt>
0x0000000000400598 <+52>: mov $0x0,%eax
0x000000000040059d <+57>: leaveq
0x000000000040059e <+58>: retq
End of assembler dump.
(gdb) disassemble getpid
Dump of assembler code for function getpid:
0x00007f19ae558530 <+0>: mov %fs:0x2d4,%edx
0x00007f19ae558538 <+8>: cmp $0x0,%edx
0x00007f19ae55853b <+11>: jle 0x7f19ae558540 <getpid+16>
0x00007f19ae55853d <+13>: mov %edx,%eax
0x00007f19ae55853f <+15>: retq
0x00007f19ae558540 <+16>: jne 0x7f19ae558554 <getpid+36>
0x00007f19ae558542 <+18>: mov %fs:0x2d0,%eax
0x00007f19ae55854a <+26>: test %eax,%eax
0x00007f19ae55854c <+28>: nopl 0x0(%rax)
0x00007f19ae558550 <+32>: je 0x7f19ae558554 <getpid+36>
0x00007f19ae558552 <+34>: repz retq
0x00007f19ae558554 <+36>: mov $0x27,%eax
0x00007f19ae558559 <+41>: syscall
0x00007f19ae55855b <+43>: test %edx,%edx
noticed also that static analysis tools like "objdump -d" is generally avoided, if u want to understand dynamic addresses. From above, we can conclude that the "sysenter" (this is intel syntax, or "syscall", in AMD syntax as used by gdb disassembly above) is used for the transition to the kernel - as embedded inside the libc.so.6.