比如,我们想要提供一段代码来分析程序中某段逻辑路径被执行的频率,或者想要在其中 插入更多功能时就会用到钩子. 钩子都是以固定的目的提供给用户的,并且一般都有文档说明....通过Hook,我们可以暂停系统调用,或者通过改变系统调用的参数来改变正常的输出结果, 甚至可以中止一个当前运行中的进程并且将控制权转移到自己手上....system call %ld\n", orig_rax);
ptrace(PTRACE_CONT, child, NULL, NULL);
}
return 0;
}
程序编译运行后输出...在64bit系统下一次可以读取64/8=8字节的数据.
修改字符串后,可以用:
ptrace(PTRACE_POKEDATA, child, addr, data);
来更新系统调用参数....这些功能其实也能用ptrace实现, 其原理就是ATTACH并追踪正在运行的进程, 读取其指令寄存器IR(32bit系统为%eip, 64位系统为%rip)的内容, 备份后替换成目标指令,再使其返回运行