比如,我们想要提供一段代码来分析程序中某段逻辑路径被执行的频率,或者想要在其中 插入更多功能时就会用到钩子. 钩子都是以固定的目的提供给用户的,并且一般都有文档说明....当我们检查完了系统调用之后, 可以调用ptrace并设置参数PTRACE_CONT让子进程继续运行. 值得一提的是, 这里的child为子进程的进程ID, 由fork函数返回....程序中WIFEXITED函数(宏)用来检查子进程是被ptrace暂停的还是准备退出, 可以通过wait(2)的man page 查看详细的内容....这些功能其实也能用ptrace实现, 其原理就是ATTACH并追踪正在运行的进程, 读取其指令寄存器IR(32bit系统为%eip, 64位系统为%rip)的内容, 备份后替换成目标指令,再使其返回运行...这里注入的代码长度只有8个字节, 而且是用shellcode的格式注入, 但实际中我们可以在目标进程中动态加载库文件(.so), 包括标准库文件(如libc.so)和我们自己编译的库文件, 从而可以通过传递函数地址和参数来进行复杂的注入