WLS2上用的,因为只在terminal里用所以精简了配置,去掉了很多gui相关的东西。
继续阅读“emacs 配置”Linux中page cache 和 buffer的关系
在遥远的年代,Linux中只有buffer作为块设备缓存,之后的某个版本将块设备缓存全面的转用page cache这种机制来实现,而目前的内核中的buffer只是块设备上面薄薄的一层,用来减少当pagecache 中的脏页回刷时的回刷量,即只需要回刷修改过的部分而不用回刷整个页面。
Linux Kernel Tips
如何在内核代码中找到某个系统调用的定义的地方
以write系统调用为例:
grep -nir "SYSCALL_DEFINE.*write" .
动态修改进程代码段(二)
简介
上一次我们的文章讲述了一些如何动态修改进程代码段的基础内容,包括
- 如何定位要修改的代码段的地址
- 如何准备要修改的代码
- 修改代码段的方式
并且用一个简单的例子说明如何在程序中进行代码段的自修改。
我们在上文的结尾处说过,自修改其实用处不大,我们举那个例子主要是为了说明原理,另外,上文使用的直接覆盖函数代码段的方式也有缺陷,具体原因我们已经在上文描述过,那么在本文中,我们将讲解更为有用的动态修改其他程序代码段的原理,并且使用跳转的方式来安置新的程序数据,最后给出一个例子, 说明它的用处和用法。
在本文中,我们主要讲解如下的点:
- 如何使用ptrace(2)系统调用来修改其他进程代码段
- 如何使用跳转指令来安置新的程序数据
动态修改程序代码段(一)
简介
从本篇文章开始,将陆续讲解一些关于动态修改进程的代码的话题。其中牵扯到
- 如何定位要修改的代码地址
我们以函数为单位进行代码的修改
- 如何准备要修改之后的代码数据
- 修改代码段的方式
等等一系列问题。本篇文章我们先只考虑如何进程进行代码的的自修改,此时要修改的代码地址就是函数指针所指向的地址,因此不用额外叙述。我们先来讨论一下为什么要动态修改进程的代码段。
继续阅读“动态修改程序代码段(一)”Git tips
创建一个新的空白分支
git checkout --orphan
git rm --cached -r .
netlink 简介
netlink是一种Linux内核和用户空间程序通信的方式,相比通过procfs进行通信,netlink的好处在于可以异步的由内核发送消息给用户空间而不需要用户程序轮询procfs
继续阅读“netlink 简介”Hello Kernel Module
Linux的宏内核架构使得内核的体积越来越大,为了解决这个问题,内核使用了一种模块机制。模块作为内核的可以被动态装入与卸出的组成部分,可以在需要时动态的链接到运行中的内核中,而在不需要时又从内核中卸出。因此模块的使用大大减少了Linux内核的体积。
正因为内核模块在运行时是动态链接到当前运行的内核中的,因此模块是内核的一部分,而不是一个独立的程序,模块开发在一定意义上来说就是内核开发。
本文不就Linux内核模块的实现机制做介绍,而只是给出内核模块的完整模型描述,然后以一个具体的helloworkd模块来使读者实际感受内核模块的编写,编译和运行。
Linux TCP 性能调优笔记
建立连接
为了保证可靠连接,tcp 建立连接需要“三次握手”,这三次握手对 tcp 的性能有至关重要的影响。
如何缩小这三次握手给性能带来的影响是网络性能调优的一个重要关注点。
pbuilder & cowbuilder
简介
cowbuilder 是 debian 官方提供的一个软件打包工具,它的作用是创建出一个独立的环境,
然后将 Debian 软件源码包导入这个环境中打包。这样做有很多好处,首先这将软件打包环境独立出来,
使得软件打包不会弄乱你的机器实际的运行环境,其次,这样做有助于检查软件包的依赖关系是否正确,
因为 cowbuilder 创建出的独立环境通常是一个最小化环境,此时如果写错了依赖,在 cowbuilder 打包时就立刻能发现。
cowbuilder和pbuilder的使用方式差不多,很多参数也都通用,实际上,可以把cowbuilder看成一个cow版的pbuilder