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

本文解析了klogctl函数在glibc中的实际实现,指出它并非来自实体源代码klogctl.c,而是通过编译时构造,其底层是通过0x67系统调用来完成的,与syslog系统调用相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实都没有实体源代码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这么个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mzhan017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值