自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 Linux 系统调用之 mknod

继续上一篇的分析,我们在使用命令: mknod /dev/my_chr_dev0 c $major 0 创建设备文件的时候,内核做了哪些事呢?可以肯定的一点是,内核肯定创建了一个 inode 结构体,并加入到系统里面,要不然在打开设备文件的时候,会因为lookup_fast()函数找不到相应的 inode,从而使得打开失败。也许你会说,lookup_fast()函数失败了,还有lookup_slo...

2018-05-08 02:35:36 4344 1

原创 使用 ssh 端口转发实现登陆内网主机

很多情况下,我们需要ssh登陆内网主机。假设我们现在有一台linux主机在公网ip上,内网主机是可以正常登陆公网主机的,下面就介绍一种方法,如何使用公网主机ssh登陆内网主机。我们先假设有 host A 和 host B 分别位于内网和公网ip,如下图:那么既然我们可以通过ssh从host A登陆到host B,那么我们就可以通过这一 ssh 隧道连接,利用端口转发实现 host B 登陆 hos...

2018-05-08 02:30:06 10935 1

原创 Linux 系统调用之open(三)

前面我们以及其简单的例子分析了linux的open系统调用过程。下面换一个例子,假如我们有个字符驱动:my_kmem.ko。使用如下脚本将其加载入内核空间:#!/bin/shmodule="my_kmem"device="my_chr_dev"mod="664"insmod $module.ko || exit 1rm -f /dev/${device}0major=`awk ...

2018-05-05 02:14:09 2780 1

原创 Linux 系统调用之open(二)

在上一篇里面我们以打开"/home/gaobsh/a.txt"为例分析了系统调用"open"的内核实现。其中我们假设了路径名中所有部分的dentry结构体均已存在在系统缓存中。即通过lookup_fast()函数成功找到目标文件的dentry。这里我们分析一下如果上述路径名某一部分如果不能通过lookup_fast()函数查找到的情况。这里还以上一篇里面的例子进行分析。在walk_componen...

2018-02-28 05:59:13 1886

原创 Linux 系统调用之open(一)

Linux下一切设备均视为文件,本文来简单分析下系统调用里面是如何打开文件的。本文仅以下面简单代码为例,看Linux内核如何完成open的系统调用的(参考内核版本:4.14.13,x86_64)。为了简单起见,本文中暂时忽略并发性访问的同步问题以及错误处理(一般情况下,上述事例中的操作都会成功,除非有权限问题,所以我们先不考虑函数调用失败的情况)。#include <stdio.h>...

2018-02-23 00:59:25 5798 1

原创 Linux 时钟中断处理(一)

最近想研究下Linux下的时钟中断,因为时钟中断算是一个操作系统下最频繁的中断事件了吧(个人认为)。以4.5 x86_64 Linux内核为例。面对庞大的代码量,无从下手啊。不如从中断号看起吧微笑Linux 源码中有这样的定义(arch/x86/include/asm/irq_vectors.h):#define LOCAL_TIMER_VECTOR 0xef如果没猜错的话,应该就是Linux下的时钟中断向量了(0xEF=239)。

2016-06-30 22:15:20 10802

原创 Linux 内核空间虚拟地址和物理地址相互转换

个人学习笔记,可能会有错误之处,敬请谅解。一直以来感觉虚拟地址和物理地址之间的相互转换非常麻烦,虚拟地址到物理地址的转换由CPU硬件完成,但物理地址到虚拟地址怎么转换啊?况且有时候在软件上也希望通过一个物理地址得到虚拟地址,这时候自然不能依赖CPU的硬件了,该怎么转换呢?今天看了下Linux代码,才发现内核地址空间的地址转换其实非常简单,总结如下(Kernel: 4.5, x86_64):

2016-06-25 17:35:41 7392 1

原创 调试 Segmentation fault 问题

今天上班的时候,这个 segmentation fault 困扰了我半天,调试了半天就是不知道问题在哪,于是愤愤的下班了,晚饭都没吃好。不过饭后坐下来,仔细想了想,想到以下办法快速定位出错的语句。方法如下:        在介绍这个方法之前,先让我扯会蛋。首先先简单说一下这个 segmentation fault 产生的过程 (个人理解)。segmentation fault 一般是指内存的非

2016-06-24 20:40:28 2483

原创 使用简单字符驱动来做Kernel Hacking

事先声明,本人菜鸟一枚,文中如有不正确之处,敬请大侠指正.(本文中举例均以4.5版本的x86_64的linux内核为例)字符驱动算是linux驱动里面比较简单的一种。说白了,就是可以对内存读哇写哇什么的。既然是对内存读写,那为什么还要驱动呢?简单的int a;a = 10;不就是对内存写吗?干嘛还要搞个驱动,这么麻烦?哈哈,利用驱动对内存的读写优势在于,可以对内核地址空间的

2016-06-12 23:15:51 6178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除