docker +tmux 远程本地gdb调试

2024-06-22 03:12

本文主要是介绍docker +tmux 远程本地gdb调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 远程调试
  • docker pull失败
  • docker上容器运行程序失败
  • 宿主机远程调试docker中运行的程序
      • 环境准备
      • 调试步骤
  • 本地调试
  • bug
  • pwngdb+tmux
  • pwngdb和tmux优化
  • ~~感觉用了大佬的镜像后宿主机来做pwn题都不香了~~

远程调试

但目前不知道如何实现可以边跟着脚本运行调试的方法

docker pull失败

https://wiki.bafangwy.com/doc/413/

docker上容器运行程序失败

https://blog.csdn.net/qq_46106285/article/details/124946919

宿主机远程调试docker中运行的程序

https://www.roderickchan.cn/zh-cn/2023-02-13-%E4%BD%BF%E7%94%A8docker%E8%B0%83%E8%AF%95pwn%E9%A2%98/#0x3-%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7

环境准备

  1. 容器中的准备

    • 安装gdbserver:首先,在Docker镜像中需要安装gdbserver。这通常通过在Dockerfile中添加相应的安装命令(如RUN apt-get update && apt-get install -y gdbserver对于基于Debian的镜像)来完成。
  2. 宿主机上的准备

    • 安装GDB:确保你的宿主机上安装了GDB,这是调试器的客户端部分,将用来远程操控容器中运行的程序。
    • 可执行文件或符号文件:宿主机上需要有与容器中待调试程序对应的可执行文件或调试符号文件。这是因为GDB在宿主机上运行时,需要这些信息来解析和展示调试信息。

调试步骤

  1. 启动容器并映射端口: 选择roderick师傅的容器直接调试了
    https://hub.docker.com/r/roderickchan/debug_pwn_env/tags
docker run -it --rm -v host_path:container_path -p host_port:container_port --cap-add=SYS_PTRACE IMAGE_ID /bin/bash
  1. 在容器中启动gdbserver:进入容器后,使用gdbserver附加到你想调试的程序,并指定监听的端口。例如,如果你的程序名为my_program,命令如下:

    gdbserver localhost:12345 my_program
    

    这会让gdbserver在容器中启动你的程序,并监听2345端口等待来自GDB的连接。

  2. 在宿主机上使用GDB连接:打开宿主机上的终端,使用GDB连接到容器中的gdbserver。你需要指定宿主机上的可执行文件路径(即使实际运行在容器中)和目标远程地址及端口:

    gdb -ex 'target remote 127.0.0.1:12345' /path/to/your_program
    

    /path/to/your_program应当是宿主机上与容器中相同的程序副本或符号文件,确保GDB能够识别并加载正确的调试信息。

  3. 开始调试:一旦连接成功,你就可以在宿主机的GDB中设置断点、单步执行、查看变量等,就像直接在本地调试程序一样。

本地调试

启动容器并映射端口: 选择roderick师傅的容器直接调试了
https://hub.docker.com/r/roderickchan/debug_pwn_env/tags

docker run -it --rm -v host_path:container_path -p host_port:container_port --cap-add=SYS_PTRACE --privileged IMAGE_ID /bin/bash

数据卷挂载-v host_path:container_path使得在宿主机上对文件修改在docker也生效,然后在docker中调试运行,在宿主机修改这个文件夹或者文件

bug

Could not find a terminal binary to use. Set context.terminal to your terminal
然后在容器中执行./exp.py就行了

pwngdb+tmux

# 绑定Ctrl+a为新的指令前缀
set -g prefix C-a# 从tmux v1.6版起,支持设置第二个指令前缀, 设置一个不常用的`键作为指令前缀,按键更快
set-option -g prefix2 `# 修改分屏快捷键
unbind '"'
bind - splitw -v -c '#{pane_current_path}' # 垂直方向新增面板,默认进入当前目录
unbind %
bind | splitw -h -c '#{pane_current_path}' # 水平方向新增面板,默认进入当前目录# 设置面板大小调整快捷键
bind j resize-pane -D 5
bind k resize-pane -U 5
bind h resize-pane -L 5
bind l resize-pane -R 5# 刷新配置文件
bind R run-shell "tmux source-file ~/.tmux.conf"# 上一个窗口
bind a last-window

https://louiszhai.github.io/2017/09/30/tmux/

  • 先按下Ctrl+a并松开,再按下?,就会显示帮助信息。然后,按下 ESC 键或q键,就可以退出帮助
  • Ctrl+a :光标切换到其他窗格
  • Ctrl+a hjkl:调整当前所在窗格大小
  • Ctrl+a a::切换到上一个窗口
  • Ctrl+a | 水平方向增加窗格
  • Ctrl+a - 垂直方向增加窗格
  • 赋值:直接鼠标选择内容就行
  • 粘贴:Ctrl+a +]

pwngdb和tmux优化

https://bbs.kanxue.com/thread-276203.htm

感觉用了大佬的镜像后宿主机来做pwn题都不香了

这篇关于docker +tmux 远程本地gdb调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083123

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译