• gdb跟踪应用程序原理浅析


    了解了应用程序的编译运行原理后,下面看一看gdb能追踪到进程的原理:

    gdb运行在应用态,基本用法是gdb ./hello,在gdb程序中拉起了hello程序,hello进程相当于gdb的子进程,gdb是hello进程的父进程。

    一)断点的原理

    gdb使用b backpoint在可执行文件中加入断点-------------在可执行文件对应的backpoint处,加入了INT3 指令,该指令是触发中断,内核收到此中断后,将当前进程暂停执行,并将中断转为软件信号SIGTRAP,发给hello进程。

    子进程被父进程使用ptrace个跟踪后,子进程的信号会被父进程获取,这样gdb获得这个信号后,暂停应用程序,可查看调用栈。

    查看调用栈有两种方法:

    1)glibc中的backtrace函数,获取当前线程的调用堆栈。

    应用程序的SIGSEGV信号,可以自定义捕获,在自定义函数中调用backtrace函数,打印调用栈。

    2)直接使用_asm_获得ebp寄存器的值,直接读取。

  • 相关阅读:
    模拟退火大法好
    宿命的PSS
    博客在summeroi.top上更新
    SPFA模板
    BZOJ 4551: [Tjoi2016&Heoi2016]树
    BZOJ 4152: [AMPPZ2014]The Captain
    BZOJ 3930: [CQOI2015]选数
    BZOJ 3875: [Ahoi2014&Jsoi2014]骑士游戏
    BZOJ4318: OSU!
    BZOJ3170: [Tjoi 2013]松鼠聚会
  • 原文地址:https://www.cnblogs.com/minihaohao/p/5175035.html
Copyright © 2020-2023  润新知