[Docker 调试进程] 首发于官方博客:https://nebula-graph.com.cn/posts/debug-nebula-graph-processes-docker/ 摘要:本文以 Nebula...Graph 进程为例,讲解如何不破坏原有容器的内容,也不用在其中安装任何的工具包前提下,像在本地一样来调试进程 需求 在开发或者测试过程中,我们经常会用到 vesoft-inc/nebula-docker-compose...其实调试容器内部的进程还有另外一种方式,不需要破坏原有容器的内容,也不用在其中安装任何的工具包就能像在本地一样来调试。 这种技术在 k8s 环境下其实已经挺常用,就是 sidecar 模式。...这样原容器中的进程和网络空间在调试容器中就能“一览无余”,而在调试容器中安装了你想要的一切顺手工具,接下来的舞台就是留于你发挥了。...总结 通过运行另外一个容器,并让其跟想要调试的容器共享 pid/network namespace 是我们能像本地调试的关键。
gdb进行多进程调试主要有以下几种方法,分别是follow-fork-mode 方法,attach 子进程方法。...child:fork之后调试子进程,父进程不受影响。 如果需要调试子进程,那么gdb启动之后,执行`(gdb) set follow-fork-mode child`并在子进程处设置断点。...detach-on-fork:set detach-on-fork on|off on:断开调试follow-fork-mode指定的进程。 off:gdb将控制父进程和子进程。...follow-fork-mode指定的进程将被调试,另一个进程置于暂停(suspended)状态。...attach调试子进程 更改上述示例程序子进程睡眠时间为60秒,然后让子进程在后台运行,然后通过ps命令查询到子进程ID [chainyang@DSNO_DP_PD_2 ~/small_program]
我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据...在这种情况下,通过进程转储功能,可以将加壳程序的内存镜像完整地保存到本地,以便进行后续的分析。在实现进程转储功能时,主要使用调试API和内存读写函数。...具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态...首先老样子先来看OnException回调事件,当进程被断下时首先通过线程函数恢复该线程的状态,在进程被正确解码并运行起来时直接将该进程的EIP入口地址传递给MemDump();内存转存函数,实现转存功能...: %d 进程PID: %d \n", hProcess, pDebug->dwProcessId); HANDLE hThread = OpenThread(THREAD_ALL_ACCESS,
在病毒分析的过程中,时常会遇到很多病毒为了躲避杀软的检测,使用进程注入的方式,将shellcode注入到系统进程中执行,本文将介绍一些在遇到shellcode注入进程时所使用的调试技巧。...可以看到这一段数据中有明文显示的可疑字符串了,看起来像是网络连接相关的,到这一步就要想办法来调试这段shellcode,这里有两种调试的思路。...如果修改为0xCC,需要注意,应该把调试器的实时调试设置选成“附加前无需确认”,这样进程启动后才会自动附加到OD进行调试(记得将内存修改回原值,如果没有自动附加,就手动附加一下进程): ?...如果修改成jmp当前地址,那么需要手动打开OD,选择要附加的进程,然后跳转到执行上下文的地址下断点,断下来后把内存地址修改为原值,再继续调试: ?...本文使用了几个示例,讲解了在恶意代码分析过程中遇到远程进程注入时的一些调试方法,虽然调试技巧有很多种,但万变不离其宗,在调试过程中可以根据自己的需要选择不同的调试思路,也可以根据原理开发一些工具,如shellcode
这里面a是我生成的调试信息的文件名。 多进程 默认设置下, 在调试多进程程序时 GDB 只会调试主进程....但是 GDB > V7.0 支持多进程的分别以及同时调试, 换句话说, GDB 可以同时调试多个程序....follow-fork-mode (默认值 parent) 和 detach-on-fork (默认值 on )即可. follow-fork-mode detach-on-fork 说明 parent on 只调试主进程...(GDB默认) child on 只调试子进程 parent off 同时调试两个进程,gdb 跟主进程, 子进程 block 在 fork 位置 child off 同时调试两个进程, gdb 跟子进程..., 主进程 block 在 fork 位置
我们继续延申调试事件的话题,实现进程转存功能,进程转储功能是指通过调试API使获得了目标进程控制权的进程,将目标进程的内存中的数据完整地转存到本地磁盘上,对于加壳软件,通常会通过加密、压缩等手段来保护其代码和数据...在这种情况下,通过进程转储功能,可以将加壳程序的内存镜像完整地保存到本地,以便进行后续的分析。 在实现进程转储功能时,主要使用调试API和内存读写函数。...具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态...首先老样子先来看OnException回调事件,当进程被断下时首先通过线程函数恢复该线程的状态,在进程被正确解码并运行起来时直接将该进程的EIP入口地址传递给MemDump();内存转存函数,实现转存功能...: %d 进程PID: %d \n", hProcess, pDebug->dwProcessId); HANDLE hThread = OpenThread(THREAD_ALL_ACCESS
这里我们说的多进程程序指的是一个进程使用 Linux 系统调用 fork() 函数产生的子进程,没有相互关联的进程就是普通的 gdb 调试,不必刻意讨论。...那么如何用 gdb 调试这样父子进程呢?一般有两种方法: 方法一 用 gdb 先调试父进程,等子进程fork出来后,使用 gdb attach 到子进程上去。...gdb attach 到各个子进程上去调试。...方法二 gdb 调试器提供一个选项叫 follow-fork ,通过 set follow-fork mode 来设置是当一个进程 fork 出新的子进程时,gdb 是继续调试父进程还是子进程(取值是...我们可以利用方法二调试程序 fork 之前和之后的任何逻辑,是一种较为通用的多进程调试方法,建议读者掌握。
[VSCode调试Electron主进程代码.001] 前言 在开发 Electron 应用的时候,为了提高工作效率,我们需要借助于调试工具,及时发现并解决问题。...今天,我来分享一下怎么在 VSCode 上调试 Electron 应用的主进程代码。 本文所述步骤是基于已经熟悉或知晓 VSCode 调试方法的,请按需食用!...接下来进入开发调试环节。...[image.png] VSCode 的调试方法大家应该都比较熟悉,这里就不做赘述,希望大家调试愉快、快乐摸鱼!...结束语 本文所介绍的方法只是调试 Electron 主进程代码方法中的一种,算是抛砖引玉,如果大家有更好的调试方法,请在评论区留言交流,期待和大家的互动!
Maven多模块项目中,通常存在摸个模块同时依赖其他多个基础模块的情况。 在eclipse中使用run-jetty-run插件调试时,常常会出现找不到被依赖模块对应源码的错误提示。 ?...这时,对模块A进行代码断点单步调试,当断点单步执行到模块B,C或者D中的代码时,就会提示找不到对应源码。 解决办法: 在run-jetty-run的调试设置窗口中,添加被依赖模块的项目即可。 ?
首先这是一种比较奇特的反调试思路,通过检测自身父进程来判定是否被调试,原理非常简单,我们的系统在运行程序的时候,绝大多数应用程序都是由Explorer.exe这个父进程派生而来的子进程,也就是说如果没有被调试其得到的父进程就是...Explorer.exe的进程PID,而如果被调试则该进程的父进程PID就会变成调试器的PID值,通过对父进程的检测即可实现检测是否被调试的功能。...PROCESSENTRY32); Process32First(hProcessSnap, &pe32); do { // 先判断是不是我们自己进程的...PID if (ProcessId == pe32.th32ProcessID) { // 判断父进程是否是 Explorer.exe...} return FALSE;}int main(int argc, char * argv[]){ if (IsDebug()) { printf("[-] 进程正在被调试
https://github.com/Lightning-AI/forked-pdb
首先这是一种比较奇特的反调试思路,通过检测自身父进程来判定是否被调试,原理非常简单,我们的系统在运行程序的时候,绝大多数应用程序都是由Explorer.exe这个父进程派生而来的子进程,也就是说如果没有被调试其得到的父进程就是...Explorer.exe的进程PID,而如果被调试则该进程的父进程PID就会变成调试器的PID值,通过对父进程的检测即可实现检测是否被调试的功能。...PROCESSENTRY32); Process32First(hProcessSnap, &pe32); do { // 先判断是不是我们自己进程的...PID if (ProcessId == pe32.th32ProcessID) { // 判断父进程是否是 Explorer.exe...return FALSE; } int main(int argc, char * argv[]) { if (IsDebug()) { printf("[-] 进程正在被调试
ps -e -o "%C : %p : %z : %a"|sort -k5 -nr|head -10 -e,显示出所有的进程 -o,格式化输出 CODE NORMAL HEADER
---- Visual Studio 多启动项目(推荐) 在 Visual Studio 的解决方案上点击右键,属性。在公共属性节点中选择启动项目。...现在,你只需要开始调试你的程序,那么你程序中启动的新的子进程都将可以自动加入调试。 例子源码和效果 现在,我们拿下面这段代码作为例子来尝试子进程的调试。...对于我们目前的场景,我们的主进程已经在调试了,所以子进程选择调试器的时候不能再选择主进程调试所用的 Visual Studio 了,而只能选择一个新的 Visual Studio;这一点很不方便。...简单的个人项目,希望快速开始多进程/子进程调试 使用附加调试器 你有多个项目组成的多进程,并且这些进程恰好可以互相唤起,它们之间的启动顺序不影响父子进程的组成 使用 Visual Studio...的多启动项目 你只有单个项目组成的多进程,或者多个进程之间依赖于启动顺序来组成父子进程 安装插件 Microsoft Child Process Debugging Power Tool -
需要与要启动的进程一样多的内核(有时内核可以处理多个“线程”,因此这是最后关注的数字)。 将使用AWS的实例p3.8xlarge,提供32个vCores和4个V100显卡。...这个包允许启动进程并创建管道以与它们通信。以下是架构的拓扑: ? 多处理图 有32个工作进程和1个主进程。...工作进程只是在玩游戏来收集数据并将其发送到主进程,主进程将训练这些数据并将新网络保存在文件中。然后,工作人员收到加载新网络,加载并再次播放N个游戏的消息。...因此,需要从主进程启动32个进程,并在主进程和每个进程(即32个管道)之间创建一个管道。还需要在主进程内创建线程以异步侦听管道。...对于GPU分配,有32个进程,4个GPU,每个16GB内存。增加每个进程的内存可以提高运行模型的进程速度。
多进程 多个进程分别修改程序中的全局变量,结果会是怎样的? 如:全局变量num初始值为0,多个进程分别对该变量进行加1,是否会产生叠加效果?...,互不影响 多次fork 在一个程序中,调用两次fork函数,会有多少个进程?...= os.fork() if pid == 0: print(3) else: print(4) # 2 # 1 # 4 # 4 # 3 # 3 由此可知,fork两次后,共有6个进程...第一次fork后,有两个进程。...这两个进程在第二次fork时,又各自产生新的进程 如图所示: ? 多次fork 源码下载
一、引言调试正在运行的进程的重要性:实时调试:调试正在运行的进程可以实时监控程序的状态和行为。这对于解决那些只在特定条件下才会出现的问题非常关键。...调试这样的场景可能会更加困难,因为问题的根源可能涉及多个进程或线程之间的交互。通过调试正在运行的进程以同时监视和调试多个进程或线程,以便更好地理解问题的源头并进行排查。...二、深入了解gdb调试正在运行的进程2.1、理解进程调试的基本概念进程调试是指通过使用调试器与正在运行的进程进行交互,以观察和控制进程的执行过程。...attach命令的语法如下:attach 其中,是要调试的目标进程的进程ID。使用attach命令进行进程调试的一般步骤:(1)首先,启动目标进程,确保它正在运行。...另外,附加到进程进行调试时,请确保对目标进程具有足够的权限,以及在目标进程所在的操作系统中允许调试操作。
C# 创建服务并附加到进程进行调试 步骤一: 在任务栏右键-》》点击任务管理器-》》选择服务,找到启动的进程PID ?...或者 WIN+R 进入cmd命令 输入 netstat -ano | find "进程端口" 找端口 ? 步骤二: VS中找到“调试”菜单,选择“附加到进程”。之后弹出例如以下对话框。...将“显示全部回话中的进程”打勾,找到启动的相关进程“w3wp.exe”,之后点击“附加”就可以。...加入进程之后我们就会发现自己的VS已经处于调试状态,之后就能够依照我们曾经的方法进行对应的调试了。 ?...这样的调试感觉有点麻烦,在解决方式中的项目不多以及合作开发者比較少的情况下F5调试感觉更为省事一些。这样的调试的优点是。我们不须要等待VS每次慢吞吞的启动,然后进入调试状态。
文章目录 一、Android 命令行中获取要调试的应用进程的 PID 二、进程注入调试进程内存的 so 库 一、Android 命令行中获取要调试的应用进程的 PID ---- 前置博客 【Android...模拟器 , 雷电模拟器 3.75 版本 ; 在模拟器中安装要调试的应用后 , 直接运行 ; 执行 dumpsys activity top|grep pid 命令 , 查看当前正在运行的应用的进程号...PID 为 2328 ; 二、进程注入调试进程内存的 so 库 ---- 在 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝...然后执行赋予权限的命令 : chmod 777 tool chmod 777 libbridge.so /data/system/debug/tool 工具有了执行权限后 , 开始向 PID 为 2328 的进程注入调试动态库.../tool 2328 命令 , 即可完成 进程 注入操作 ; 如果命令行输出的 hook_entry_addr = 0xa36044e0 不为空 , 是一个实际的地址 , 说明调试动态库注入成功 ; 完整命令行输出
文章目录 一、等待进程状态改变 二、detach 脱离进程调试 PTRACE_DETACH 三、调试中继续运行程序 PTRACE_CONT 一、等待进程状态改变 ---- 上一篇博客 【Android...逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 ) 中 , 介绍了 attach 被调试进程 ; 之后需要 等待 被调试...进程的状态改变 , 如果进入处于被调试的状态下 , 其进程的状态会发生变化 ; 被调试进程一旦进程处于被调试状态 , 就会处于 WUNTRACED 状态 , WUNTRACED 是宏定义 值为 2 ;...| 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 ) 博客 ; detach 调试进程 完整代码 : int CPtrace::detachProc() { // 如果当前没有被调试的进程...; 本操作不需要等待 被调试进程 状态返回变化 ; 三、调试中继续运行程序 PTRACE_CONT ---- 调试过程中 , 如果需要被调试进程继续运行 , 运行到下一个断点或者运行一行代码 , 调用
领取专属 10元无门槛券
手把手带您无忧上云