linux内核杂谈
文章平均质量分 64
liuhangtiant
这个作者很懒,什么都没留下…
展开
-
深入探究Linux Kprobe机制
概述kprobe机制用于在内核中动态添加一些探测点,可以满足一些调试需求。本文主要探寻kprobe的执行路径,也就是说如果trap到kprobe,以及如何回到原路径继续执行。实例先通过一个实例来感受下kprobe,linux中有一个现成的实例:samples/kprobes/kprobe_example.c由于当前验证环境是基于qemu+arm64,我删除了其他架构的代码,并稍稍做了一下改动:/* * NOTE: This example is works on x86 and power原创 2020-11-08 11:19:02 · 969 阅读 · 0 评论 -
探究动态库函数的地址是在何时确定的
问题描述写了一段main函数:#include <stdio.h>#include <unistd.h>int main(int argc, char **argv){ printf("hello world\n"); printf("12345678\n"); _exit(0);}很简单,两条打印。但是printf属于glibc动态链接库,是在程序运行的时候再再加载链接进来的,那么这里的main函数是如何确定printf的地址的呢?从main函数的反汇原创 2020-09-06 14:57:36 · 1017 阅读 · 0 评论 -
探寻main函数以外的大千世界
前言本篇文章并不探寻程序的本源,那是个庞大的话题,当然也是一个很吸引人的话题,但是本文并不打算谈论那些;本篇文章也不旨在解决什么实质性问题,因为据我多年工作经历来说,只了解main函数已经足够,至于main函数以外有什么,似乎无关紧要。我写下本片文章仅仅是因为一个我一直知道但是一直没有去了解的一个问题,linux下一个用户程序的起点在哪里?作为一个基于linux/uboot做驱动开发多年的老程序员来说,我当然知道main并不是唯一,不是起点,更不是终点,而仅仅是一个阶段,当然这是一个不可或缺的阶段。原创 2020-09-01 07:24:20 · 245 阅读 · 0 评论 -
一文讲透linux内核抢占
三种抢占模型概述在linux内核选项中存在存在三种抢占模型: │ │ ( ) No Forced Preemption (Server) │ │ │ │ (X) Voluntary Kernel Preemption (Desktop) │ │ │ │ ( ) Preemptible Kernel (Low-Latency Desktop) No Force原创 2020-08-09 00:05:44 · 1359 阅读 · 0 评论 -
Linux+ARM64 系统调用
前言用户进程有用户态和内核态两种执行状态,用户进程可以通过系统调用陷入内核态,陷入内核态就意味着可以访问内核的资源。那么如何陷入内核态呢?一般通过同步异常操作来实现。ARM64专门定义了svc指令,用于进入同步异常,也就是说,一旦执行了svc指令,cpu立即跳转到同步异常入口地址处,从这个地址进入内核态。从glibc说起要了解系统调用的完整机制,我们可以从glibc入手,因为glibc...原创 2018-12-21 00:14:35 · 6975 阅读 · 0 评论 -
谈一谈copy_from_user和copy_to_user
前言copy_from_user和copy_to_user这两个函数相信做内核开发的人都非常熟悉,分别是将用户空间的数据拷贝到内核空间以及将内核空间中的数据拷贝到用户空间。这两个函数一般用于系统调用中,前者将用户空间参数拷贝到内核,后者将系统用的结果返回到用户空间。用户空间和内核空间Linux将地址空间分为用户空间和内核空间,内核文档Documentation/arm64/memory....原创 2018-12-23 23:36:28 · 33826 阅读 · 1 评论