其实都没有实体源代码klogctl.c,而是通过编译时构造出来的源代码实体,比如klogctl这个函数,glibc的反汇编如下:
 直接是0x67这个系统调用:103:
Reading symbols from /usr/lib64/libc-2.28.so...
(No debugging symbols found in /usr/lib64/libc-2.28.so)
(gdb) disass klogctl
Dump of assembler code for function klogctl:0x000000000003a320 <+0>:       endbr640x000000000003a324 <+4>:       mov    $0x67,%eax0x000000000003a329 <+9>:       syscall0x000000000003a32b <+11>:      cmp    $0xfffffffffffff001,%rax0x000000000003a331 <+17>:      jae    0x3a334 <klogctl+20>0x000000000003a333 <+19>:      ret0x000000000003a334 <+20>:      mov    0x384b2d(%rip),%rcx        # 0x3bee680x000000000003a33b <+27>:      neg    %eax0x000000000003a33d <+29>:      mov    %eax,%fs:(%rcx)0x000000000003a340 <+32>:      or     $0xffffffffffffffff,%rax0x000000000003a344 <+36>:      ret
从Linux的源码里才能查看到103是什么。
 
 /glibc-2.28/sysdeps/unix/sysv/linux/syscalls.list文件里的定义,也说是映射到系统调用syslog。
 klogctl EXTRA syslog i:isi klogctl
在Linux系统里有这个系统调用的定义在printk.c这个文件里
SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len)
{return do_syslog(type, buf, len, SYSLOG_FROM_READER);
}
所以不要纠结说,为什么在glibc里找不到相应的klogctl.c这么个文件。