如何用ptrace拦截系统调用并替换为自定义代码
tracer能够改变系统调用参数,改变系统调用的返回值,甚至屏蔽特定的系统调用,将特定系统调用替换为自定义的helloworld函数。
ptrace系统调用的拦截替换原理为:利用ptrace函数使父进程跟踪子进程,当子进程在执行系统调用时,断住子进程,获取并保存当前系统调用的寄存器信息。然后备份ip寄存器指向的指令块A,替换为我们要执行的code指令块B,B执行后ip地址值恢复为指令块A及寄存器内容。
下面用例子实现上面的系统调用拦截替换功能。首先我们的目标是将一个打开文件的系统调用拦截,并替换为打印输出“helloworld”的字符串。
1.先得到自定义代码的二进制码
汇编实现文件ptrace_helloworld_asm.c

运行指令
gcc ptrace_helloworld_asm.c -o ptrace_helloworld_asm.o
./ptrace_helloworld_asm.o

objdump -d ptrace_helloworld_asm.o
目标二进制代码为:

2.ptrace拦截系统调用并替换
使用ptrace拦截系统调用

最低0.47元/天 解锁文章
756

被折叠的 条评论
为什么被折叠?



