fork函数在用户态的追踪

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值