动态修改进程代码段(二)

简介

上一次我们的文章讲述了一些如何动态修改进程代码段的基础内容,包括

  • 如何定位要修改的代码段的地址
  • 如何准备要修改的代码
  • 修改代码段的方式

并且用一个简单的例子说明如何在程序中进行代码段的自修改。

我们在上文的结尾处说过,自修改其实用处不大,我们举那个例子主要是为了说明原理,另外,上文使用的直接覆盖函数代码段的方式也有缺陷,具体原因我们已经在上文描述过,那么在本文中,我们将讲解更为有用的动态修改其他程序代码段的原理,并且使用跳转的方式来安置新的程序数据,最后给出一个例子, 说明它的用处和用法。

在本文中,我们主要讲解如下的点:

  • 如何使用ptrace(2)系统调用来修改其他进程代码段
  • 如何使用跳转指令来安置新的程序数据

继续阅读“动态修改进程代码段(二)”

动态修改程序代码段(一)

简介

从本篇文章开始,将陆续讲解一些关于动态修改进程的代码的话题。其中牵扯到

  • 如何定位要修改的代码地址

我们以函数为单位进行代码的修改

  • 如何准备要修改之后的代码数据
  • 修改代码段的方式

等等一系列问题。本篇文章我们先只考虑如何进程进行代码的的自修改,此时要修改的代码地址就是函数指针所指向的地址,因此不用额外叙述。我们先来讨论一下为什么要动态修改进程的代码段。

继续阅读“动态修改程序代码段(一)”

Hello Kernel Module

Linux的宏内核架构使得内核的体积越来越大,为了解决这个问题,内核使用了一种模块机制。模块作为内核的可以被动态装入与卸出的组成部分,可以在需要时动态的链接到运行中的内核中,而在不需要时又从内核中卸出。因此模块的使用大大减少了Linux内核的体积。

正因为内核模块在运行时是动态链接到当前运行的内核中的,因此模块是内核的一部分,而不是一个独立的程序,模块开发在一定意义上来说就是内核开发。

本文不就Linux内核模块的实现机制做介绍,而只是给出内核模块的完整模型描述,然后以一个具体的helloworkd模块来使读者实际感受内核模块的编写,编译和运行。
继续阅读“Hello Kernel Module”

Linux TCP 性能调优笔记

建立连接

为了保证可靠连接,tcp 建立连接需要“三次握手”,这三次握手对 tcp 的性能有至关重要的影响。
如何缩小这三次握手给性能带来的影响是网络性能调优的一个重要关注点。

三次握手

pbuilder & cowbuilder

简介

cowbuilder 是 debian 官方提供的一个软件打包工具,它的作用是创建出一个独立的环境,
然后将 Debian 软件源码包导入这个环境中打包。这样做有很多好处,首先这将软件打包环境独立出来,
使得软件打包不会弄乱你的机器实际的运行环境,其次,这样做有助于检查软件包的依赖关系是否正确,
因为 cowbuilder 创建出的独立环境通常是一个最小化环境,此时如果写错了依赖,在 cowbuilder 打包时就立刻能发现。

cowbuilder和pbuilder的使用方式差不多,很多参数也都通用,实际上,可以把cowbuilder看成一个cow版的pbuilder
继续阅读“pbuilder & cowbuilder”

debian 系发行版 initramfs 调试方法

简介

在进行 debian 系统开发时,如果开发工作涉及对 initramfs 定制修改,就需要对 debian 的 initramfs 有一个详细的了解。
本文希望通过对 linux 系统普遍使用的 initramfs 和 debian 系统如何自动生成使用 initramfs 的讲解,来减轻读者在 debian 系统及其衍生版本上开发调试 initramfs 时的痛苦。

继续阅读“debian 系发行版 initramfs 调试方法”