Linux: dev: glibc: 里面有很多的关于系统调用的函数

发布时间:2024年01月21日

其实都没有实体源代码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>:       endbr64
   0x000000000003a324 <+4>:       mov    $0x67,%eax
   0x000000000003a329 <+9>:       syscall
   0x000000000003a32b <+11>:      cmp    $0xfffffffffffff001,%rax
   0x000000000003a331 <+17>:      jae    0x3a334 <klogctl+20>
   0x000000000003a333 <+19>:      ret
   0x000000000003a334 <+20>:      mov    0x384b2d(%rip),%rcx        # 0x3bee68
   0x000000000003a33b <+27>:      neg    %eax
   0x000000000003a33d <+29>:      mov    %eax,%fs:(%rcx)
   0x000000000003a340 <+32>:      or     $0xffffffffffffffff,%rax
   0x000000000003a344 <+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这么个文件。

文章来源:https://blog.csdn.net/qq_36428903/article/details/135725419
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。