fork函数在用户态的追踪

来源:互联网 发布:unity3d中xml编写 编辑:程序博客网 时间:2024/06/01 09:08

1.环境配置:

a.在终端输入ddd命令,打开ddd调试工具。然后打开上文的test_fork可执行文件。

注意 编译test_fork.c文件中,-g是将代码加入进去,便于ddd分析

b.如下图所示,右键函数开始执行处,加上断点。

c.在ddd中点击run命令,执行该程序。这样程序就会执行执行到断点处,下面开始分析程序。


2.首先查看现在寄存器的值。因为系统调用号是通过eax传递过去的,所以要监控eax寄存器的变化。


3.在fork+147处,eax寄存器发生改变。当执行到上图箭头所指命令时eax数值变为了0x78=120 ,通过查看系统调用表,发现对应的系统调用为sys_clone。


上图在箭头处进入了一个函数,执行stepi进入该函数

4.由下图可知进入了kernel_vsyscall的函数,继续跟踪这个函数,sysenter这个命令使函数由用户态进入到内核态。eax的寄存器的值为0x78





执行完sysenter后,fork函数执行执行到+16处,跳过了int 0x80中断。说明是通过sysenter快速系统调用进入得到的内核。

上述只是在用户态调试,并没有办法进入内核态去跟踪系统调用。要想继续跟踪,需要进入已经搭建好的环境进一步调试内核。

 

5.函数触发系统调用是通过调用libc里的封装例程syscall ,  借助这个封装例程向内核发送系统调用号。终端中输入man syscall 来查看这个函数的功能。



文档下载地址:很全:http://download.csdn.net/detail/u014734779/7417169


0 0