在glibc里找ioctl()系统调用

本文介绍了如何调试glibc以理解ioctl()系统调用的工作原理。通过安装调试符号表、下载glibc源码,然后使用gdb进行调试,作者逐步深入到glibc的源码中。在调试过程中,作者发现了sysdeps/unix/syscall-template.S中的系统调用模板,并跟踪到相应的宏定义,最终通过反汇编代码与源码对比,验证了ioctl()的调用流程。
摘要由CSDN通过智能技术生成

背景:了解ioctl()从用户空间到内核空间的整个调用链。内核那边已经理清了,glibc这边不太好弄。晚上各种查,捣鼓出了一点结果。

首先从下载的glibc源码里找ioctl(),没发现比较直接的代码实现(主要是没看到陷入内核的相关代码)。后来不得已,干脆调试glibc代码得了,以前没调试过,不妨现在一试。

调试glibc代码,主要参考这两篇:使用gdb调试glibc用gdb追踪glibc代码执行过程。大致过程是:

(1) 安装glibc符号表:$sudo apt-get install libc6-dbg
(2)下载glibc源码:$sudo apt-get source libc6-dev

a. 命令执行完后,在当前目录下生成eglibc-xxx目录,里面就是glibc源码。我自己生成的目录为~/eglibc-2.15

(3)编译生成带有调试信息的可执行文件:$gcc -g -o xxx xxx.c

(4)调试xxx:gdb xxx

a. 指定源码搜索路径:directory ~/eglibc-2.15

其实~/eglibc-2.15这个目录范围很广,如果知道自己要调试的库函数所在的具体路径,就直接指定这个路径。就鄙人这个情况,我是不知道ioctl()是在哪个路径哪个文件下的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值