简介:
编译安装:
分析:
init主要是初始化的工作,ATTACH等。
init–>startup_attach–>attach_tcb–>ptrace_attach_or_seize:进行PTRACE_ATTACH挂载。
init–>startup_attach–>attach_tcb:参数加 -f followfork就为1,这样就可以调试全部线程。通过/proc/xxxx/task下的线程号对其进行attach。
next_event:wait4等待进程是否断下,并返回对应的pid号。
next_event–>pid2tcb:通过pid找到对应的tcb结构体。
next_event–>startup_tcb–>get_scno–>get_regs–>ptrace_getregset:获取寄存器的值。
next_event–>startup_tcb–>get_scno–>arch_get_scno:通过get_regs获取到的寄存器的值得到orig_rax,orig_rax是sys_call的系统调用号。
系统调用号(Linux内核):
再通过系统调用号找到对应的sysent结构体。
sys_func指向的是对应的系统函数地址。用来打印对应的系统函数。
dispatch_event函数主要是打印对应的数据。
dispatch_event–>ptrace_restart:调用ptrace中的PTRACE_SYSCALL让程序再下次执行到系统调用时断下来。