简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:GDB之破解ptrace反调试。
2.用法实例
1 #include <sys/ptrace.h>
2 #include <stdio.h>
3
4 int main()
5 {
6 if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0 ) {
7 printf("gdb正在调式此程序, 立即退出.\n");
8 return 1;
9 }
10 printf("没有发现调试此程序, 继续运行\n");
11 return 0;
12 }
正常调试情况会进入第7行,然后退出。
破解ptrace反调试步骤
# gdb test
//进入ptrace源码中
(gdb) catch syscall ptrace
(gdb) r
(gdb) c
//修改ptrace的`rax`寄存器的值,达到修改返回值的目的,只要rax大于0就行。
(gdb) set $rax=100
(gdb) c
Continuing.
没有发现调试此程序, 继续运行
[Inferior 1 (process 510451) exited normally]