首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux ptrace 实现

前言:ptrace 是 Linux 内核提供非常强大系统调用,通过 ptrace 可以实现进程单步调试和收集系统调用情况。...比如 strace 和 gdb 都是基于 ptrace 实现,strace 可以显示进程调用了哪些系统调用,gdb 可以实现对进程调试。本文介绍这些工具底层 ptrace 是如何实现。...这里选用了 1.2.13 早期版本,原理是类似的,新版内核代码过多,没必要陷入过多细节中。 1 进程调试 ptrace 系统调用实现中包含了很多功能,首先来看一下单步调试实现。...通过 ptrace attach 到指定 pid 完成对进程调试(控制)。 首先看一下第一种实现。...1.2 方式2 除了开始时通过 ptrace 设置进程调试,也可以通过 ptrace 动态设置调试进程能力,具体是通过 PTRACE_ATTACH 命令实现

1.5K20

实时Linux内核实现

目前Linux内核主线不支持软实时,而是使用下面2个仓库存放和Linux内核主线版本对应实时内核源代码。...(4)实现可抢占RCU,把RCU保护读端临界区变成可以抢占。 (5)把自旋锁和读写锁替换为可以抢占、支持优先级继承锁。 (6)互斥锁、伤害/等待互斥锁和读写信号量支持优先级继承。...在上面的例子中,把进程1优先级临时提升到进程2优先级,防止进程3抢占进程1,使进程1尽快执行完临界区,减少进程2等待时间。 实时互斥锁(rt_mutex)实现了优先级继承。...为了降低实现复杂性,只允许一个进程获取读锁,进程可以递归获取读锁。 读写锁定义如下。...14.参考文档 (1)A realtime preemption overview,https://lwn.net/Articles/146861/,(说明:Linux内核没有完全按照这篇文档实现) (

6.5K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux下自建CA实现

    CentOS7上搭建lamp环境 要求如下,搭建在同一台虚拟机上,实现下述3个功能: vhost1: pma.stu13.com, phpMyAdmin, 同时提供https服务 vhost2: wp.stu13...cd /web/dz tar xf /home/tools/Discuz_X3.2_SC_UTF8.tar      # linux 不支持rar格式软件,这里用tar格式替代 mv Discuz_X3.2..._SC_UTF8/upload/* ./ rm -rf Discuz_X3.2_SC_UTF8/# 清理无用目录和文件 chown -R apache:apache /web/*   # 防止解压出文件权限问题...    # 重启httpd服务,使得SSL配置生效 三、安装mysql(这里以Mariadb通用二进制格式包为例) # 安装mariadb通用二进制格式包 tar xf mariadb-5.5.43-linux-x86..._64.tar.gz -C /usr/local/ cd /usr/local/ ln -s mariadb-5.5.43-linux-x86_64/ mysql cd mysql/ groupadd

    2.4K50

    Linux文件系统实现

    来源:Linux爱好者 ID:LinuxHub Linux文件管理从用户层面介绍了Linux管理文件方式。Linux有一个树状结构来组织文件。...它们存储能力具有持久性,不会因为断电而消失;存储量大,但读取速度慢。 观察常见存储设备。最开始区域是MBR,用于Linux开机启动(参考Linux开机启动)。...启动区之后是超级区(Super block)。它存储有文件系统相关信息,包括文件系统类型,inode数目,数据块数目。 随后是多个inodes,它们是实现文件存储关键。...在硬盘上实现这一分级结构关键,是使用inode来虚拟普通文件和目录文件对象。 在Linux文件管理中,我们知道,一个文件除了自身数据之外,还有一个附属信息,即文件元数据(metadata)。...Linux以inode方式,让数据形成文件。 了解Linux文件系统,是深入了解操作系Linux原理重要一步。

    1.8K60

    Linux文件系统实现

    Linux文件管理从用户层面介绍了Linux管理文件方式。Linux有一个树状结构来组织文件。树顶端为根目录(/),节点为目录,而末端叶子为包含数据文件。...它们存储能力具有持久性,不会因为断电而消失;存储量大,但读取速度慢。 观察常见存储设备。最开始区域是MBR,用于Linux开机启动(参考Linux开机启动)。...启动区之后是超级区(Super block)。它存储有文件系统相关信息,包括文件系统类型,inode数目,数据块数目。 随后是多个inodes,它们是实现文件存储关键。...在硬盘上实现这一分级结构关键,是使用inode来虚拟普通文件和目录文件对象。 在Linux文件管理中,我们知道,一个文件除了自身数据之外,还有一个附属信息,即文件元数据(metadata)。...Linux以inode方式,让数据形成文件。 了解Linux文件系统,是深入了解操作系Linux原理重要一步。

    2.7K50

    Linux守护进程编程实现

    守护进程是一种非常实用进程。Linux大多数server就是用守护进程实现。比方,Internetserverinetd,Webserverhttpd等。同一时候,守护进程完毕很多系统任务。...守护进程编程本身并不复杂,复杂是各种版本号Unix实现机制不尽同样,造成不同Unix环境下守护进程编程规则并不一致。...这须要读者注意,照搬某些书上规则(特别是BSD4.3和低版本号System V)到Linux会出现错误。以下将全面介绍Linux下守护进程编程要点并给出具体实例。 一....守护进程编程要点 前面讲过,不同Unix环境下守护进程编程规则并不一致。所幸是守护进程编程原则事实上都一样,差别在于具体实现细节不同。这个原则就是要满足守护进程特性。...同一时候,Linux是基于Syetem VSVR4并遵循Posix标准,实现起来与BSD4相比更方便。编程要点例如以下; 1. 在后台执行。 为避免挂起控制终端将Daemon放入后台执行。

    2.4K20

    Linux线程互斥是如何实现

    操作步骤   (1)创建锁   // 创建互斥锁mutex   pthread_mutex_t mutex;   (2)初始化锁   在Linux下, 线程互斥量数据类型是pthread_mutex_t...,这个线程就会阻塞住,直到之前线程unlock之后才能执行,由此,实现同步,也就达到保护临界区资源目的。   ...为了实现互斥操作,大多数体系结构提供了swap或exchange指令,该指令作用是把寄存器和内存单元数据交换,由于只有一条指令,保证了原子性。...但互斥无法限制访问者对资源访问顺序,即访问是无序。   同步:是指在互斥基础上(大多数情况),通过其它机制实现访问者对资源有序访问。...也就是说,一个互斥量只能用于一个资源互斥访问,它不能实现多个资源多线程互斥问题。信号量可以实现多个同类资源多线程互斥和同步。当信号量为单值信号量是,也可以完成一个资源互斥访问。

    1.5K50

    Linux Shell命令自动补全实现

    背景介绍 最近在完成一个由linux shell脚本编写工具时,发现在实现多个功能时,冗长多个参数不仅难记而且大小写混杂,虽然“悉心”地写了完备'-h'帮助文档,但是为了实现其中一个功能,仍然需要输入多个冗长字符串来定位某个大选项下小选项所对应功能...实现思路 在 linux shell 下本身有着体验极佳命令补全功能,即[Tab][Tab]。现通过自定义该程序命令补全脚本实现命令补全。...重点说明 执行shell 函数,函数中生成COMPREPLY作为候选补全结果 compgen(筛选命令) 用来筛选生成匹配单词候选补全结果 [root@localhost ~]# help compgen...COMP_CWORD 类型为整数,当前输入单词在COMP_WORDS中索引 COMPREPLY 类型为数组,候选补全结果 COMP_WORDBREAKS 类型为字符串,表示单词之间分隔符 COMP_LINE...类型为字符串,表示当前命令行输入字符 COMP_POINT 类型为整数,表示光标在当前命令行哪个位置 实例 注:本示例只针对实际应用场景做了简单实现,做个思路引子。

    5.8K31

    Linux 内核动态追踪技术实现

    前言:之前文章介绍了基于 tracepoint 静态追踪技术实现,本文再介绍基于 kprobe 动态追踪即使实现。同样,动态追踪也是排查问题利器。...#include #include #include #define MAX_SYMBOL_LEN...kretprobe 是基于 kprobe 实现,主要逻辑是通过通过 kprobe 注册一个 pre_handler,在 pre_handler 中 hack 掉函数栈,因为函数执行时,返回地址是存在栈中...总结:内核通过劫持方式实现了 kprobe,基于 kprobe 动态追踪技术可谓是非常复杂而强大,我们可以利用这个机制,动态修改逻辑,收集信息。...不过实现过于复杂,涉及到对 CPU 架构和内存模型了解,本文也是大致分析了一下流程,有兴趣同学可以自行查看源码。

    75422

    Linux 文件系统操作实现

    磁盘与目录容量 磁盘整体数据是在superblock块中,但是每个个别文件容量则在inode当中记载,常用来显示磁盘使用量两个命令 df: 列出文件系统整体磁盘使用量 du: 评估文件系统磁盘使用量...) -i: 不用硬盘容量,而以inode数量显示 df主要读取数据几乎都是针对整个文件系统,因此读取范围只要是在super block内信息,所以这个命令显示结果速度非常快速。...不包括子目录下总计 -k 以KB列出容量显示 -m 以MB列出容量显示 du会直接查找文件系统所有文件数据 连接文件: ln 在linux连接文件有两种:一种是类似Windows上快捷方式,...号码,连接文件重要内容就是它会写上目标文件文件名,因为箭头右边文件是 4 Byte,所以连接文件大小为 4 byte。...若想要仔细一点,则可对刚才新建好文件系统进行检验。 在linux系统上,需要创建挂载点(也即是目录),并将它挂载上来。

    1.1K10

    使用vscode远程linux开发实现

    告别过去 在vscode有了remote ssh之前,大多数Linux服务器开发者通常使用vs远程Linux,或者xshell配合vim姿势,进行服务器开发,虽然vs很强大,调试很清晰,可是打开vs时间和启动调试时间是比较长...,xshell使用vim虽然也很方便,但是仍然会存在感官上不足,我厌倦了打开多个tab来回切换,也厌倦了千篇一律命令行界面, 所以我选择了vscode远程Linux服务器来学习linux开发。...快捷开发,一秒启动vscode 上部分页面编辑,下部分使用命令行,再也不用来回切换tab 通过ssh连接Linux服务器,实现Linux环境调试运行 怎样获得 1....连接Linux服务器 ? 5. 进行开发,安装开发所需扩展(以c++为例) ? 6.

    2.1K31

    Linux实现自动登录实例讲解

    使用expect实现自动登录脚本,网上有很多,可是都没有一个明白说明,初学者一般都是照抄、收藏。可是为什么要这么写却不知其然。本文用一个最短例子说明脚本原理。 脚本代码如下: #!.../usr/bin/expect] 这一行告诉操作系统脚本里代码使用那一个shell来执行。这里expect其实和linuxbash、windows下cmd是一类东西。...注意:这一行需要在脚本第一行。 2. [set timeout 30] 基本上认识英文都知道这是设置超时时间,现在你只要记住他计时单位是:秒 3....[expect “password:”] 这里expect也是expect一个内部命令,有点晕吧,expectshell命令和内部命令是一样,但不是一个功能,习惯就好了。...以上就是本次介绍关于Linux实现自动登录相关实例内容,感谢大家学习和对ZaLou.Cn支持。

    1.5K20

    Linux 内核静态追踪技术实现

    而这些方向往往都涉及到底层东西,所以就自然需要去了解内核提供一些技术,内核提供能力,经过多年发展,可谓是百花齐放,而且非常复杂。本文简单分享一下内核静态追踪技术实现。...追踪,其实就是收集代码在执行时一些信息,以便协助排查问题。 1 Tracepoint Tracepoints 是一种静态插桩技术,实现虽然复杂,但是概念上比较简单。...2 trace event 有了 Tracepoint 机制后,我们就可以写模块加载到内核中实现自己插桩点。但是内核也为我们内置提供了非常多插桩点。具体是通过 trace event 来实现。...我们可以看到插桩这种机制是一种静态机制,我们通常需要依赖当前版本内核所支持桩,从而获得对应信息,但其实内核也提供了动态追踪能力,可以实现热插拔获取信息能力。...总的来说,Linux追踪技术多种多样,虽然非常复杂,但是上层也提供了各种更方便工具,这些能力是我们深入排查问题利器。

    1.8K20
    领券