수동 삽입 int3 프로그램 주동 인터럽트 실현

1435 단어
gdb의 조건 인터럽트는 프로그램이 일정한 조건을 충족시킬 때 멈출 수 있습니다
break ... if cond
그러나 때때로 프로그램 논리가 비할 바 없이 복잡하거나 조건이 비할 바 없이 복잡해서 gdb의 수동적인 단점을 설정하기 어렵다.이 때 프로그램에서 인터럽트 문장을 추가해서 주동적으로 인터럽트를 할 수 있다.대부분의 디버거도 단점에 이상 지령을 꽂아서 이루어지는 원리와 같다.
 
예:
test.c
#include <stdio.h>
#include <stdbool.h>

int main()
{
    printf("hello
"); int very_complex_condition = true; if (very_complex_condition) __asm__ __volatile__("int $3"); printf("world
"); return 0 ; }

 
$ gcc test.c -g -o test
$ gdb ./test GNU gdb (GDB) 7.1-ubuntu Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  Type "show copying"and "show warranty"for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from/home/zjin/code/c/a.out...done. (gdb) run Starting program:/home/zjin/code/c/a.out hello
Program received signal SIGTRAP, Trace/breakpoint trap. main () at debug.c:10 10     printf("world"); (gdb)

좋은 웹페이지 즐겨찾기