自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(10)
  • 资源 (1)
  • 收藏
  • 关注

原创 ptrace源代码分析

      ptrace作为应用程序调试的基石,要想对其有深入的了解,最好的方法是分析它的源代码。选取linux2.6.8,更高版本的内容基本相同。实现ptrace系统调用功能的主要是sys_ptrace函数,当然还包括一些读写寄存器的辅助函数。该函数的基本结构比较简单: (1)判断该进程是否被跟踪,即request==PTRACE_TRACEME,如果是,对其进行处理。 (2)根据被跟踪子进程的pid找到其task结构体 (3)判断是否为init进程(pid==1)

2011-01-04 14:47:00 2956

原创 ptrace应用之三代码注入(codeinjection)

      在Linuxjoural杂志上看到了一篇关于ptrace代码注入的文章,写的非常的好,所以就有想翻译一下的想法。基本内容如下:如果我们想跟踪调试一个已经在运行的进程,我们可以使用 ptrace(PTRACE_ATTACH.......  ),它的功能基本上等同于ptrace(PTRACE_TRACEME.....  )。当我们完成跟踪后,我们可以使用ptrace(PTRACE_DETACH......  )让子进程继续运行。下面是一个实例程序: #include int main()

2010-12-07 20:26:00 3567

原创 ptrace应用之二单步调试

<br /><br />      ptrace提供了PTRACE_SINGLESTEP命令来实现对子进程执行单步调试的功能。在单步调试时,内核在子进程中执行的每一条指令前阻塞,然后将控制权交给父进程,父进程可以查看子进程的变量和寄存器的值,完成程序的调试。<br />    下面是用汇编写的一个从三个数中找到最大数的程序。文件名为find_maxnum.s 1 .section .data 2 var1: 3 .long 23 4

2010-11-29 19:32:00 1463

原创 ptrace 应用之一基础知识

      Linux提供了ptrace系统函数,使得父进程得以控制和监视其它进程。当使用ptrace跟踪子进程后,所有发给子进程的信号(除了SIGKILL)外,都会被父进程截获,而此时子进程阻塞,并且被标记为TASK_TRACED。父进程收到信号后,可以查看和修改子进程的内核映像和寄存器。父进程完成所要做的工作之后可以选择让子进程继续执行还是终止。      在i386体系中,应用程序的系统调用基本过程:将系统调用号放在eax寄存器,其他的函数形参依次放在ebx,ecx,edx,esi,edi中, 注

2010-11-18 16:35:00 1418

原创 linux应用程序调试的基石-ptrace

         ptrace是process和trace的简写,直译为进程的跟踪。它是操作系统提供给应用程序调试器诸于gdb,strace的系统调用接口(API)。      具体过程为: 父进程首先进行fork调用,并在子进程中执行Ptrace函数,将PTRACE_TRACEME赋值给request形参,紧接着在子进程中执行exec调用完后。将控制权交给父进程,通过使用PTRACE_ATTACH,父进程开始跟踪子进程,每一次被跟踪的子进程都会向父进程发送一个信号。父进程可以忽略掉大部分信号,仅有的一个

2010-11-03 20:54:00 2129

原创 .config 和 kconfig以及 makefile的关系

       当我们编写完一个驱动后,我们要把它以模块形式编译或者直接编译 进内核时,需要修改相关文件,其中最重要的便是kconfig ,makefile。 主要是分析一下三者之间的关系,然后就其语法简要的谈一下。      当我们在内核源码目录下执行make (或者make menuconfig等 命令)命令时,实际上是根据makefile 来进行编译的。我在mini2440 开发板上编写了一个按键控制led灯的驱动。文件名为buttons_leds_z hao.c属于字符驱动。因此在/dri

2010-09-15 20:17:00 9131 5

原创 mini2440 按键和led灯的驱动

      很久没有继续写博客了,主要是最近一段时间在友善之臂开发板mini2440上调试驱动程序。按照配套的教材我分别看完按键驱动和led灯的驱动,突然想将两者结合起来,即写一个新的驱动,在该驱动中实现按键控制led灯的功能,简而言之,是将两者驱动融合,在内核空间实现此功能,然后在用户空间编写应用程序来测试所写的驱动。熟悉一下驱动的编写和移植流程。经过一段时间的努力,终于实现了此功能。写驱动的基本流程(1)看原理图,熟悉硬件的IO端口接线,查看相关芯片说明手册。列出相关寄存器的表格 (2)驱动的编写尽量在

2010-08-30 20:01:00 514

原创 U盘分析(1)

         我下载了了源代码包是linux2.6.32在mini2440上运行,有一个主USB和从USB,但是插上我的金士顿U盘却不见反应,因此不由得想探究一下。在/drivers/usb/下有如下文件:[root@zhaowanli usb]# lsatm         class  gadget  Kconfig   modules.order  otg     storagebuilt-in.o  core   host    Makefile  mon            README 

2010-07-01 21:05:00 1339

原创 走进USB的世界

     随着PC逐渐发展,尤其是外设越来越丰富,因此接口也越来越多。比如,打印机用并口,键盘有PS/2口等等。PC接口往往不够。在这种情况下,一种新的接口标准出现了,它就是USB(Universal Serial Bus)。它是由微软,英特尔,惠普,NEC等公司制定的计算机接口标准。并有取代串口,并口的趋势。    目前,usb2.0最大通讯速率是480Mbps,usb3.0已经开始出现,最高速率可以达到5Gbps。    usb的基本框架:      

2010-06-18 19:04:00 580

原创 linux shell初探

    linux 操作系统的shell有很多种,比如bash shell,csh shell等等,最常用的是bash shell。shell是一个解释器,它将我们输入的命令逐个解释执行。    当我们在终端提示符下输入命令时,这是会fork一个进程,父进程当然是shell程序/bin/sh,返回值大于0(子进程的PID),这是是在父进程中执行,返回值为0.,在子进程中执行   pid=fork();  swith(pid){case  -1 ;perror('it is fault");break;cas

2010-06-02 20:21:00 712 1

c 语言step by step

学习c语言的一本经典好书 从入门到精通,帮助初学者迅速掌握c语言的 精髓。

2009-05-24

空空如也

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

TA关注的人

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