首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用gdb调试附加进程 - 如何从循环中转义

使用gdb调试附加进程时,如果需要从循环中转义,可以使用以下方法:

  1. 使用断点(breakpoint):在循环开始之前设置断点,然后使用continue命令继续执行程序,直到程序执行到断点处暂停。这样可以避免循环的执行,从而实现转义。
  2. 使用step命令:使用step命令逐步执行程序,可以在循环内部逐行执行,从而避免循环的执行。
  3. 使用next命令:使用next命令执行程序,但不会进入函数内部执行。这样可以在循环内部逐行执行,但不会进入循环体内的函数调用,从而避免循环的执行。
  4. 使用finish命令:使用finish命令结束当前函数的执行,从而跳出循环。
  5. 使用signal命令:使用signal命令向程序发送信号,可以中断程序的执行,从而避免循环的执行。

以上是一些常用的方法,可以帮助您从循环中转义。在使用gdb调试附加进程时,需要根据具体情况选择合适的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何实现一个Lua调试

简介 lua在游戏服务器,用的越来越多,作为一门嵌入式语言,lua一直没有一个好用的调试器。于是花了点时间做了一个gdb风格的lua调试器dlua,用来解决到处打log定位问题的烦恼。...实现 下面是具体实现的细节,既然期望是gdb风格,那么很显然,我们不能修改源程序,不管是c部分还是lua部分。所以我们需要一个第三方的程序来附加到目标进程上,然后开始调试。...模块划分与通信 既然需要附加,那么直接使用so注入工具来做这个事情,具体参考linux的so注入与热更新原理。...一个动态链接库dluaagent so,注入到目标进程运行,负责实际的调试操作。 两部分是运行在两个进程,所以需要建立一种通信方式来耦合。.../hookso argp PID 0xXXXXXX 1 循环几个函数尝试,最后我们拿到了lua_State的指针 2.png 这里可能有人要问,为什么不自己去解析,要使用gdb呢?

2.1K30

GDB调试-入门实践到原理

写在前面 在我的工作经历,前几年在Windows上进行开发,使用Visual Studio进行调试,简直是利器,各种断点等用鼠标点点点就能设置;大概12年开始转Linux开发了,所以调试都是基于GDB...为了支持多进程调试GDB版本7.0开始支持单独调试(调试进程或者子进程)和同时调试多个进程。 那么,我们该如何调试进程呢?我们可以使用如下几种方式进行子进程调试。...如果我们知道了进程ID,就可以使用attach命令对其进行调试了。 在上面代码,fork()函数创建的子进程内部,首先会进入while循环sleep,然后在while循环之后调用printf函数。...循环,无论如何是不会执行到下面printf函数。...,那么使用follow-fork-mode命令完全可以满足需求;但是如果想在调试过程,想根据实际情况在父进程和子进程之间来回切换调试呢?

2.9K30
  • 使用GDB附加调试64位程序

    使用GDB附加调试64位程序 pwntools开发脚本时如何调试: 1、使用proc.pidof§函数先将被测函数的PID打印出来 2、 用GDB Attach上去调试即可 本次实验的代码如下:...使用checksec指令来看看 没有nx保护,没有pie保护,地址不随机化,没有栈执行的保护,没有stack保护,64位的程序 使用objdump指令看看汇编语句 典型的64位可以看到rbp...什么的 看到了expliot函数,这个是我们要利用的函数 然后开启gdb,老规矩,pattern create 200 r 现在开始写exp 代码如下 输出pid主要是为了下一步附加进程分析用的...,p64后面的地址是exploit的函数入口地址 getshell成功 调试的话要在sendline之前暂停一下,把gdb附加进去 暂停成功 附加成功,暂停到了cmp指令 然后exp那边先运行了...,获取了shell,然后在gdb这边一直单步 单步到这里,我们分析一下,gets我们会获取什么,是不是我们刚才填充的a啊,对吧 我们可以看到寄存器中都是a,继续单步 我们ret到了

    43610

    买了很多书,看了很多教程,仍然看不懂开源代码......

    因此我结合自己的工作经验,写了一套《gdb 高级调试实战教程》,这个教程有如下特点: 以调试开源项目 Redis-Server 为例,项目不是玩具型的,具有实战意义; 按调试流程, gdb 附加调试程序...,到启动 gdb 调试再到使用 gdb 中断 Redis 查看各种状态,循序渐进地介绍各种 gdb 调试命令; 介绍了实际工作 gdb 的各种高级调试技巧,例如如何显示超长字符串、如何使用 gdb 调试进程程序等等...我们在当前窗口使用gdb attach 5246命令将 gdb 附加到 Nginx 主进程上去。...再开一个 shell 窗口,使用gdb attach 5247将 gdb 附加到 Nginx 子进程: [root@iZbp14iz399acush5e8ok7Z sbin]# gdb attach...有些读者可能会说:用 gdb 附加进程后,加好断点,然后使用 run 命令重启进程,这样就可以调试程序启动到运行起来之间的执行流程了。

    1K22

    使用 gdb 调试进程程序 —— 以调试 nginx 为例

    那么如何gdb 调试这样父子进程呢?一般有两种方法: 方法一 用 gdb调试进程,等子进程fork出来后,使用 gdb attach 到子进程上去。...我们在当前窗口使用 gdb attach 5246 命令将 gdb 附加到 nginx 主进程上去。...然而,方法一存在一个缺点,即程序已经启动了,我们只能使用 gdb 观察程序在这之后的行为,如果我们想调试程序启动到运行起来之间的执行流程,方法一可能不太适用。...有些读者可能会说,我用 gdb 附加进程后,我加好断点然后使用 run 命令重启进程这样不就可以调试程序启动到运行起来之间的执行流程了。...问题是这种方法不是通用的,因为对于多进程服务模型,有些父子进程有一定的依赖关系,是不方便在运行过程重启的。这个时候就可以使用方法二来调试了。

    2.7K10

    IDA + GDBServer实现iPhone程序远程调试

    所以一直以来调试iPhone上的二进制程序只能悲催的使用ssh+gdb进行调试,虽然调试器的功能还算可以,但是每次调试都需要设置显示,只能使用命令进行控制,因而用起来还是不是十分爽。...图4 另外还需要在设备上安装ssh服务端,这个直接cydia源安装即可。最后就是程序的调试了。 在这里的调试可以使用预先分析文件和直接attach的方式进行调试。...图13 关闭所有的设置窗口,现在就可以进行附加了,点击ok之后将会弹出如图14所示的进程列表。 图14 选择进程id为0的进程进行附加,如果成功将会弹出如图15所示的窗口。...设置完成之后就可以启动调试器了,此时会提示已经有远程进程在被调试,是否附加到,如图18. 图18 点击yes之后就可以进行调试了,如果附加成功将会弹出提示信息。...由于上面的两个问题导致现在ida虽然可以附加进程或者启动独立的进程进行调试,但是实际的效果并不理想。明显是一锤子买卖,一旦暂停就完全死翘翘了,这也就是在文章开始处提到的那个问题。

    1.6K30

    格式化字符串漏洞利用 七、工具

    任何可以使用ptrace的进程,你都可以使用这个方式快速判断格式化字符串的地址。strace用于获取缓冲区地址,数据读入到该地址,例如如果read被调用来读取数据,它们之后又用作格式化字符串。...了解这两个工具的用法,你可以节省大量时间,你也可以使用它们来尝试将 GDB 附加到过时的程序上,它没有任何符号和编译器优化,来寻找两个简单的偏移。...7.2 GDB,objdump GDB [7],经典的 GNU 调试器,是一个基于文本的调试器,它适用于源码和机器代码级别的调试。虽然它看起来并不舒服,一旦你熟悉了它,它就是程序内部的强大接口。...对于任何事情,调试你的利用,到观察进程被利用,它都非常好用。...objdump,一个 GNU 二进制工具包的程序,适用于可执行二进制或目标文件获取任何信息,例如内存布局,区段或main函数的反汇编。我们主要使用它来二进制获取 GOT 条目的地址。

    31420

    Android逆向分析大全

    概述 __ 分析步骤 通用逆向分析步骤 1.了解该模块正向编程相关方法 2.使用apktool解密apk,得到资源、jni模块等文件 3.apk提取出dex文件,使用dex2jar转换成jar文件,...APK Android studio 在android studio可以采用运行调试进程附加方式调试,支持条件断点、一次断点、对单线程下断,有6种断点: TypeCh TypEn Description...查看ddms进程端口号 8600 使用jdb调试:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8600 下断点:函数断点...dex 使用ida分析apk或者apk中提取出的dex 设置调试选项,包括包名和主类名,参考反编译的AndroidManifest 启动调试即可 image [图片上传失败...用ida分析so,并在JNI_OnLoad下断点,动态附加后,ida会自动rebase,使用gdb 的catch load命令捕获 Java层/Linux层联合调试 __ 有源码联合调试 参照前几节 无源码联合调试

    3.4K41

    Android基础开发实践:如何分析Native Crash

    尽管Android Studio默认不使用gdb进行调试,我们仍然可以使用gdb对我们的native代码进行调试,因为gdb是一款优秀的调试工具,尤其是对于我们的native源码单独进行编译,与java...在Android上使用gdb编译不是一件轻松的事情,但是也并不复杂。Android SDK实际上已经包含了一套gdb调试工具,我们直接拿来使用即可。...其中gdbserver是用在target(手机)附加进程进行调试的服务,而gdb则是host上用于调试的界面,或者叫做client,另外你还可以给gdb加上一个图形界面。...完整的调试架构大致如下: ? 下面我们看看如何gdb连接上的native代码。步骤分为以下4部分: 1....这样我们可以使用同样的方式将gdbserver附加调试进程: 1. push gdbserver到手机:先创建目录adb shell mkdir /data/local/tmp/,然后push文件:adb

    17.7K153

    CC++生态工具链——GDB调试

    三,GDB使用流程 step.1: 开始编译之前,需要配置调试相关的编译命令 a.如果使用gcc/g++编译,需要加入参数“-g"。...方式3:gdb [program] [pid] 利用gdb调试服务的一个进程,pid指定了要调试进程。运行该指令,gdb会以attach的方式进入进程内部开始调试。...step.3: 调试完,退出GDB界面 方式1:在gdb窗口敲下快捷键Ctrl+z 方式2:在gdb窗口输入指令"quit"或"q" 简单使用样例 Demo.cpp: #include <iostream...执行下一行代码,遇到函数直接进入 next(n) 执行下一行代码,遇到函数不会进入 continue(c) 继续执行直到下一个断点 jump 直接跳到指定位置继续执行 until 和next一样单步执行,常用于循环...detach-on-fork on/off 设置fork时是否同时调试父子进程 set scheduler-locking on/off 设置调试线程时,其他线程是否同步执行 五,GDB使用案例 1.

    1.6K20

    原来gdb的底层调试原理这么简单

    我们都知道,在使用 GCC 编译时,可以增加 -g 选项在可执行文件嵌入更多的调试信息,那么具体嵌入了哪些调试信息呢?这些调试信息是如何与二进制的指令之间进行相互交互的呢?...在调试的时候,调试信息如何获取函数调用栈的上下文信息的呢? 针对上面这些疑惑,道哥用两篇文章把这些底层最深处的问题彻底描述清楚,让你一次看过瘾。...我们既可以使用黑乎乎的终端窗口来调试程序;也可以使用集成开发环境(IDE),这个IDE已经嵌入了调试器,这样就可以单击各种 button 来代替手动输入调试命令了。...GDB如何调试已经执行的服务进程 是否有小伙伴会提出这样一个疑问:上面被调试的程序 test 是从头开始执行的,是否可以用 gdb调试一个已经处于执行的服务进程呢?答曰:可以。...总结 通过 break 和 next 这2个调试指令,我们已经明白了 gdb 如何处理调试指令的了。

    1.7K40

    用图文带你彻底弄懂GDB调试原理

    我们都知道,在使用gcc编译时,可以使用-g选项在可执行文件嵌入更多的调试信息,那么具体嵌入了哪些调试信息?这些调试信息是如何与二进制的指令之间进行相互交互?...在调试的时候,调试信息如何获取函数调用栈的上下文信息? 针对上面这些疑惑,道哥用两篇文章把这些底层最深处的问题彻底描述清楚,让你一次看过瘾。...第二篇文章,我们选择一个体积小巧、五脏俱全的LUA语言来进行剖析,源代码分析到函数调用栈,指令集到调试库的修改,一网打尽。...五、GDB如何调试已经执行的服务进程 是否有小伙伴会提出这样一个疑问:上面被调试的程序test是从头开始执行的,是否可以用gdb调试一个已经处于执行的服务进程呢?答曰:可以。...八、总结 通过break和next这2个调试指令,我们已经明白了gdb如何处理调试指令。

    5.5K53

    深入浅出GDB调试

    但是在实际应用GDB 更常用来调试C和C++程序。虽然说在Linux系统下我们可以借助诸多集成开发工具来完成程序的编写和调试,但实际上,调试C/C++程序一定是直接或者间接使用GDB完成的。...在Linux下C/C++必备的调试器就是GDB了,下面讲解如何查看GDB版本及安装GDB。 2....(8)u(until) ① 跳出循环体 在遇到循环体时,如果在循环体尾部(最后一行代码)按 until 调试键,会直接执行完整个循环体,并停在循环体外。...举个小例子 可以看到,Enb 那一栏 yes 变成了 no。 (13)watch 设置观察点,如果在执行过程变量发生变化,就把他打印出来,并停止运行。...① 首先通过 ps 命令查看进程号,找到 loop 进程进程信息 ② 通过gdb的 -p 参数,指定进程进入调试 ③ 正在运行的程序会暂停,可以正常调试了 3.

    14110

    CVE-2017-8291及利用样本分析

    PostScript是一种基于堆栈的解释语言(例如stack language),它类似于Forth语言但是使用Lisp语言派生出的数据结构。...图片41 枚举并判断 返回explorer.exe进程ID: ? 图片42 explorer.exe进程ID 之后将Shellcode注入到explorer.exe进程: ?...图片76 解密并写入 实际上解密后的该部分将被注入到HimTrayIcon.exe进程,详见下文分析。获取当前系统内所有进程的快照之后通过Process32Next()枚举进程: ?...图片77 枚举进程 ? 图片78 跳出循环 遍历线程,找到HimTrayIcon.exe之后打开并挂起线程: ? 图片79 遍历线程 将解密出来的Shellcode写入到进程: ?...图片81 退出 其注入Shellcode可以附加HimTrayIcon.exe之后调试,亦可将Shellcode转成exe之后调试,笔者选择转成exe之后再进行调试。解密内存的PE文件: ?

    71740

    gdb基础命令和常用操作补充

    使用GDB需要在编译时使用-g选项,gcc支持-g –O选项同时使用,但如果还在调试阶段,尽量不要-O2,也不要删除(strip)符号表。...Attach到后台进程,将操作预先输入好,避免影响程序正常运行 sudo gdb ....在gdb中表示寄存器名时前面要加个$,例如p $esp可以打印esp寄存器的值,如esp寄存器的值是0xbff1c3f4,所以x/20 $esp命令查看内存0xbff1c3f4地址开始的20个32位数...,打印函数信息 until   在循环体内跟踪程序,直到整个循环结束 until+行号: 运行至某行,不仅仅用来跳出循环 12. x 命令可以显示指定地址的内存数据。...其他零散 调试进程。 (gdb) set follow-fork-mode child 临时进入Shell执行命令,Exit返回。 (gdb) shell 调试时直接调用函数。

    3K00

    GDB高级技巧

    GDB高级技巧 yijian 2009-2-22 难得有雅兴,边动手边记录操作步骤,本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。...1) 查看宏 默认情况下,在GDB是不能查看宏的值及定义的,但通过如下方法,则可以达到目的: 编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令...如果想在命令执行完,再执行某个或某些命令,则: #define hookpost-print echo ----------\n end 7) GDB循环 GDB支持if/else/while...handle SIGPIPE ignore 表示忽略PIPE信号,进入gdb后,执行“help handle SIGPIPE”可以看到更多用法 set follow-fork-mode child 用于跟踪调试进程程序...,表示fork之后跟踪子进程,而父进程不受影响 set follow-fork-mode parent 表示fork之后继续跟踪父进程,子进程则不受影响,同样可以进入gdb后,执行“set follow-fork-mode

    1.5K10

    GDB实现原理和使用范例

    一、前言 这篇文章为了让你深入了解gdb的工作原理,以及如何在linux环境下使用强大的gdb调试程序功能。 二、gdb工作原理 2.1....gdb可以基于这里调试信息进行工作。 GCC 允许你同时使用 -g 和 -O 选项。...如何实现跟踪程序 一个elf程序中有symbol table,symbol是一段程序或者变量的符号链接,使用#nm -g openssl可以查看。...gdb的跟踪调试功能设置程序的断点break point,父进程通过ptrace接管子进程除了SIGKILL之外所有的信号。...当子进程(就是我们调试的程序)在发送break point或者单步调试,会产生一个信号SIGTRAP,被父进程(这里的gdb)捕获到,这时用户就可以通过gdb实时观察到当前的子进程状态。

    5.2K10

    Go每日一库之174:delve (Go 调试工具)

    为什么不推荐 gdb • gdb 对 Go 的调试支持是通过一个 python 脚本文件 src/runtime/runtime-gdb.py 扩展的,功能有限 • gdb 只能做到最基本的变量打印,却理解不了...(dlv) # 接下来的步骤和调试源文件的一样,这里不再赘述 调试进程 为了让进程保持在运行状态,我们在程序中加一行休眠代码: package main import "time" func main...单步调试某个 CPU 指令 stepout 当前函数跳出 操作断点 命令 描述 break 设置断点 breakpoints 打印所有断点 clear 删除断点 clearall 删除所有断点 condition...,也可以用 quit 综合示例 最后,我们使用一个的小例子,熟悉下常用的几个命令。...golang 进程 hang 死的 bug: https://xargin.com/how-to-locate-for-block-in-golang/ [4] Debugging with GDB

    65830
    领券