Linux
文章平均质量分 69
顾小林
这个作者很懒,什么都没留下…
展开
-
fedoral 17-x86编译linux-4.5.4内核浅析及编译过程
Linux Kernel 实现了Kconfig和Kbuild以及Makefile,用于辅助内核的配置和编译,使得linux kernel的编译过程变得相当简单。(一)内核编译1、将Linux-3.5.4.tar.bz2解压至”/usr/src/kernel“目录下cd /usr/src/kernels/tar -jxvflinux-3.5.4.tar.bz2说明一下:因为目标文原创 2013-04-04 18:54:45 · 2030 阅读 · 0 评论 -
linux 3.5.4 PTRACE(系列九)
本文主要分析ptrace的单步调试功能单步调试的含义相信大家已经非常清楚了,PTRACE_SINGLESTEP参数就能够使被跟踪的程序单步执行。PTRACE_SINGLESTEP重新启动被停止的程序,让其执行一条指令之后又停止。我们用下面的代码加以验证。list11.c#include "ptrace.h"void main(int argc,char *argv[]){原创 2013-12-18 10:47:09 · 1301 阅读 · 0 评论 -
LINUX 3.5.4 PTRACE (系列七)
本文主要研究父进程利用ptrace系统调用访问子进程的内存。跟踪进程能够查看被跟踪进程的地址空间并且查看进程某个内存地址锁存储的变量的值。在这里我们需要使用linux内核的nm工具对程序进行分析从而获取到符号的地址信息。本文分析的例子就是通过变量的地址修改变量的值。具体程序如下:child4:#include "ptrace.h"void main(int argc,char原创 2013-12-17 22:12:46 · 1927 阅读 · 0 评论 -
linux 3.5.4 ptrace源码分析分析(系列一)
ptrace是linux系统中为了调试专门设立的一种系统调用。要想调试调试一个进程,有两种方式:PTRACE_TRACEME和PTRACE_ATTACH。这两种方式的主要区别可以概括为:PTRACE_TRACEME是子进程主动申请被TRACE。而PTRACE_ATTACH是父进程自己要attach到子进程,相当于子进程是被动的trace。PTRACE_TRACEME程序设置的框架大概为原创 2013-12-13 11:04:36 · 3260 阅读 · 0 评论 -
linux 3.5.4 PTRACE(系列六)
本文分析一下父进程通过ptrace系统调用查看子进程寄存器的情况。首先附上源码:list6.c#include "ptrace.h"void main(){ int i=0,status=0,pid; struct user_regs_struct uregs; if((pid=fork())==0){ ptrace(PTRACE_TRACEME,0,0,0)原创 2013-12-17 18:36:18 · 1330 阅读 · 0 评论 -
linux3.5.4 PTRACE(系列四)
ptrace系统调用的原型为:long ptrace (enum __ptrace_request request,pid_t pid,void *addr,void *data);其中,request表明了我们向ptrace请求的服务。在list1的示例中,我们使用的是PTRACE_TRACEME表明了子进程主动要求被跟踪的意愿。而且对于PTRACE_TRACEME,其他的参数均被忽略。原创 2013-12-17 16:43:08 · 1052 阅读 · 0 评论 -
linux3.5.4 ptrace源码分析二(系列二)
相比较于PTRACE_TRACEME,PTRACE_ATTACH则是一个进程(将要成为父进程)主动的去trace一个正在运行的进程(子进程)PTRACE_ATTACH的主要处理函数如下:static int ptrace_attach(struct task_struct *task, long request, unsigned long addr, unsigned lon原创 2013-12-13 15:42:24 · 2101 阅读 · 0 评论 -
LINUX 3.5.4 PTRACE(系列三)
本系列文章将对ptrace系统调用的强大功能进行详细分析和验证,通过本系列文章,可以深入理解ptrace的实现原理和使用方法,之后编写自己的编译器就不在话下了。我们首先以一个简单的例子作为入门。‘CTRL+C’这个快捷键我们再熟悉不过了。在正常情况下,我们向一个正常的进行发送‘CTRL+C’ 即SIGINT信号,程序就会停止运行。但是,如果我们在程序中加入ptrace系统调用之后,‘CTRL+原创 2013-12-17 14:53:42 · 1148 阅读 · 0 评论 -
LINUX 3.5.4 PTRACE(系列五)
从list1.c中我们可以看到是子进程通过PTRACE_TRACEME来主动要求被跟踪的,但是,对于一个调试器而言,它必须能够主动的跟踪一个任意的进程而不仅仅是调试那些主动要求被跟踪的进程。接下来我们用list2.c来分析依稀PTRACE_TRACEME对exec系列系统调用的处理list2.c#include "ptrace.h"void main(){ int pi原创 2013-12-17 17:52:44 · 1071 阅读 · 0 评论 -
kallsyms实现原理源码分析
kallsyms在进行源码调试时具有相当重要的作用。linux内核在编译的过程中,将内核中所有的符号(所有的内核函数以及已经装载的模块)及符号的地址以及符号的类型信息都保存在了/proc/kallsyms文件中。具体格式如下:各列的含义依次为符号地址,符号类型,符号名c0100000 T startup_32c0100000 A _textc01000c6 t checkCPUtypec01001原创 2013-12-05 16:08:05 · 5293 阅读 · 0 评论 -
linux生产消费者模型
本文主要分析的是多生产者,多消费者以及多个资源的进程间的同步和互斥机制。原创 2013-11-28 17:37:08 · 1040 阅读 · 0 评论 -
linux Fedoral17 oracle virtualBox 桥接网络设置
我在这里简要总结一下Fedoral17 orical VirtualBox桥接网络设置的步骤1、在如上图的界面中设置有几点说明:(1)连接方式为桥接方式界面名称是你的windows(我的是window7的系统)主机里的网卡的名称计算机-》管理-》设备管理器-》网络适配器查看。(2)promiscuous Mode设置为 Allow all2、手动打开虚拟机的网络连接原创 2013-04-12 11:43:13 · 1487 阅读 · 0 评论 -
linux 3.5.4 系统调用分析
1、概述 系统调用时用户空间程序访问内核的唯一方式,glibc(c库)除了实现标准c规范所需的库函数之外,还提供了一套封装例程,将系统调用封装后供用户编程使用。所以,系统调用也属于一种API。那么,用户空间程序访问系统调用的方法有哪些呢?a、使用封装函数#include......getpid();......getpid正是glibc库对系统调用sys_getpid提原创 2013-12-20 16:43:19 · 1570 阅读 · 0 评论