gdb 调试 PIE程序

Pwn基础学习1-[栈溢出]/篇1 是缓冲区溢出的一种,当缓冲区数据大于缓冲区大小时,缓冲区之外的有用数据就会被多出去的缓冲区数据覆盖改写,从而可能导致程序崩溃。 阅读详情

方法1

可以安装gdb的pwndbg插件
使用

b *$rebase(0x相对基址偏移)

方法二

可以先找到pie

$ ps -aux|grep task_shoppingCart
hu         6158  0.0  0.0   4356   632 pts/18   S+   07:50   0:00 ./task_shoppingCart
hu         6162  0.0  0.0  21292  1088 pts/20   S+   07:51   0:00 grep --color=auto task_shoppingCart

可以通过pie找到其基址

/proc/6158/map_files$ ls
557d7b317000-557d7b319000  7f0d1da3c000-7f0d1dc3c000  7f0d1de6b000-7f0d1de6c000
557d7b518000-557d7b519000  7f0d1dc3c000-7f0d1dc40000  7f0d1de6c000-7f0d1de6d000
557d7b519000-557d7b51a000  7f0d1dc40000-7f0d1dc42000
7f0d1d87c000-7f0d1da3c000  7f0d1dc46000-7f0d1dc6c000

基址为0x557d7b317000
真实地址=0x557d7b317000+偏移(ida中地址后三位)
可以在python中进行gdb.attach

def DEBUG(bps=[],pie =False):
    cmd ='set follow-fork-mode parent\n'
    #cmd=''
    if pie:
        base =int(os.popen("pmap {}|awk '{{print $1}}'".format(p.pid)).readlines()[1],16)
        #base =int(os.popen("pmap -x {0} ".format(p.pid)).readlines()[2][:16],16)
        cmd +=''.join(['b *{:#x}\n'.format(b+base) for b in bps])
    else:
        cmd+=''.join(['b *$rebase({:#x})\n'.format(b) for b in bps])

    # if bps !=[]:
    #     cmd +='c'
    pwnlib.gdb.attach(p,cmd)

方法三

ida远程调试

~/Documents/idaserver$ sudo ./linux_server64 
IDA Linux 64-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...

在这里插入图片描述

http://www.bubuko.com/infodetail-2709846.html

gdb attach到已经存在的进程进行在线调试------能获取当前栈的所有变量值 阅读详情

相关推荐

深入理解Linux程序崩溃:PIE、动态库与静态库的调试技巧对比

本文深入探讨了Linux环境下程序崩溃的调试技巧,重点对比了PIE(位置无关可执行文件)、动态库与静态库在崩溃分析中的差异。文章详细解析了core dump和backtrace的工作原理,并提供了针对不同链接方式下的地址解析方法,帮助开发者高效定位和解决复杂的崩溃问题。

weixin_29215815的博客 406

Linux下GDB中的 attach pid 如何使用?

linux下使用gdb可以很好的跟踪代码。 当然,让我觉得神奇的是它竟然能跟踪正在运行的进程。 下面,我将用我的例子演示一下怎么使用的。 第一步:获得正在运行的进程的进程号 ps -ef | grep <进程名> 我的就是: 找到该进程的进程id,我的就是2486400, 下面根据这个进程号,attach到这个进程上去。 第二步: gdb attach <pi...

tuijiangmeng87的博客 1万+

病理WSI配准库valis教程

病理WSI配准库valis教程

azrealq的博客 2598

高级调试技巧揭秘:深入了解gdb调试正在运行的进程

这篇文章深入介绍了使用gdb进行高级调试的各种技巧和方法,包括调试正在运行的进程、远程调试、动态调试、内存调试、多线程调试和调试优化代码。这些技巧对于开发人员在调试和优化复杂程序时非常有用。重点是深入了解如何使用gdb调试正在运行的进程。

Lion_Long的博客 5742

PWM调节DCDC参数计算原理

SOC芯片的核电压、GPU电压、NPU电压、GPU电压等,都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS(Dynamic Voltage and Frequency scaling),优化性能和功耗。

电子绿洲的博客 3162

【RK3399】Android平台增加一款声卡设备(ES7210+ES8156),进行录音/播放测试。

文章目录前言一、开发环境二、概述三、硬件介绍1、ES72102、ES81563、数字麦克风阵列4、音频示意图四、下载SDK五、编译、烧写1、u-boot2、kernel3、Android SDK4、烧写分区5、烧写固件六、声卡驱动1、添加codec代码2、修改Kconfig3、修改Makefile4、修改rockchip_defconfig5、修改DTS七、声卡调试1、查看声卡注册信息2、使用tinycap/tinyplay录音和放音3、使用示波器观测八、修改HAL层1、修改默认capture/playba

rentong123的博客 2万+

gdb attach 的基础使用

在Linux上执行多线程的程序,当程序执行退出操作时有时会遇到卡死现象,如果程序模块多,代码量大,很难快速定位,可试试gdb attach方法。

m0_73537205的博客 890

RK3566/RK3568 Android 11 无操作自动隐藏导航栏、底部上拉显示导航栏

RK3566/RK3568 Android 11 定制大全在系统服务中增加无操作自动隐藏导航栏方法,在上层app动态调用无操作自动隐藏导航栏方法,系统会在5秒无操作后自动隐藏导航栏,隐藏导航栏后从底部上拉可显示导航栏,设备关机和重启后也能继续生效。

qq_23921815的博客 1260

深入解析Linux中ASLR与-no-pie编译选项的安全与调试实践

本文深入解析Linux中ASLR与-no-pie编译选项的安全与调试实践,详细介绍了ASLR技术原理、PIE机制及其在开发、测试和生产环境中的应用。通过实战案例和常见问题排查指南,帮助开发者在安全性和调试便利性之间找到平衡,提升Linux系统安全防护能力。

weixin_29240711的博客 240

Python爬虫实战:深度解析携程/飞猪酒店评论API与大数据采集

本文详细介绍了如何通过Python爬虫技术获取携程和飞猪平台的酒店评论数据。我们涵盖了从API分析、反爬虫对策到数据存储和处理的完整流程。API逆向分析:通过浏览器开发者工具发现和分析API接口反爬虫对策:使用请求头随机化、IP代理、浏览器自动化等技术异步处理:使用asyncio提高爬取效率数据质量:实现数据清洗和质量检查机制系统架构:构建可扩展的分布式爬虫系统未来改进方向:机器学习识别验证码分布式爬虫架构实时数据流处理更智能的反反爬虫策略。

2201_76125261的博客 601

目前最强的价格行为技术分析AI!大A也能用!还免费!

有球友推荐了一个历史最强的价格行为技术分析AI工具,使用下来确实很惊艳,解决了 很多AI工具黑盒过程,难以回溯的问题,他的决策过程可解释,提供决策树、诊断结果、原始响应、调试信息和未来走势预期。用户能够看到模型为什么选择“做多、做空或不下单”。会检查置信度、入场条件、盈亏比、结构失效和冷却期。最大的优点不是“预测一定准确”,而是把主观的价格行为分析整理成了可重复、可解释、可校验、可持续跟踪的工程化流程。本文记录本项目在 Windows 上的实际部署与启动方法。

木头大左的博客 75

gdb的基本使用教程

r = run 运行程序,如果你当前已经在运行程序了,再输入r会重新运行程序b = break 下断点,在调试pwn中,一般是 b0xabcde ,abcde是在ida中看到的地址,如b0x400908c = continue 继续运行程序直到停在下一个断点n = next 下一行,一般装了pwndbg之后下一行指的是下一条汇编,但是如果调试的程序是带调试信息的,一般会跳几行汇编ni = nexti 下一条指令,这个就是真正的下一条汇编指令。

2401_88473757的博客 406

已经下载了WSL2但Docker依然显示版本过旧无法使用,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2907

7.pwn 工具整体安装和使用

aslr:查看:cat /proc/sys/kernel/randomize_va_space 2表示打开关闭:echo 0>/proc/sys/kernel/randomize_va_space。

2301_80361487的博客 1251

第3讲:单端传输线的时域TDR仿真(基于实战的第一次仿真视角切换)

本文为CST仿真系列教程的第3讲,主要介绍传输线阻抗(TDR)的两种仿真方法:基于S参数的频域计算和基于高斯脉冲的时域计算。文章详细演示了在CST PCB Studio中修改电容参数、设置TDR仿真参数(包括截止时间和采样点数)的操作步骤,并通过对比实验展示TVS寄生电容对阻抗曲线的影响。最后将两种TDR方法的结果进行对比,验证了两种方法的一致性。本教程适合硬件工程师通过时域波形直观分析传输线阻抗特性,是信号完整性分析的重要技能。

一只豌豆象的博客 228

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux程序崩溃调试实战:从core dump到backtrace的完整指南(附常见错误排查)

本文详细介绍了Linux程序崩溃调试的全过程,从core dump的配置生成到backtrace的捕获分析,提供了完整的实战指南。通过GDB调试工具和信号处理机制,帮助开发者快速定位段错误、内存泄漏等常见问题,提升Linux环境下的程序调试效率。

w7x8y9z的博客 165

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

开启pie保护利用之重启main函数

pie保护我们只能确定main函数后三位地址,所以常规方法改返回地址为main函数是行不通的,这时候就需要用到magic_gadget了,我们通过ida查看libc链接文件中libc_start_main的汇编会发现一个magic_gadget。修改返回地址的尾字节发现我们将main函数的栈地址赋给了rax,那么call rax就行再次返回main函数,此时我们又多了两次read的机会,打ret2libc就可以。将rsp+98h+var_90里的值赋给rax,然后返回rax,我们进入gdb调试看一下。

2301_79880074的博客 547

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Pwndbg内存断点调试指南:断点使用步骤

还在为GDB原生断点功能不够强大而烦恼吗?Pwndbg提供了革命性的内存断点调试功能,让二进制分析和逆向工程更加高效!本文将手把手教你掌握Pwndbg的核心断点技巧。 ## 🎯 基础断点操作 Pwndbg在GDB标准断点基础上进行了大幅增强: ```bash # 设置普通断点 break main break *0x400000 # 条件断点 break main if $rax ==

gitblog_00010的博客 314

攻防世界 no_strings_attached(两种动调)

无壳32,ida在authenticate里面看到了decrypt,操作之后返回字符串,也就是说,想要的字符串就经过了decrypt的处理,追踪。

2401_83086823的博客 392

【pwn系列】Pwndbg 汇编调试实操教程

摘要: 本文为零基础Pwn学习者提供GDB调试C程序的实用指南。通过创建简单测试程序test.c,讲解编译参数-g、-fno-stack-protector和-no-pie的作用,确保调试清晰可控。重点演示GDB基础四步操作:启动调试(gdb ./test)、查看源码(list)、设置断点(break)、控制执行(run/next/step)及查看变量(print)。通过靶机程序逐步实践,帮助新手掌握调试核心技能,为后续漏洞挖掘打下基础。

一只枷锁的博客 1917

栈溢出之静态分析和动态调试

栈溢出之IDA静态分析和gdb动态调试。

qq_35763649的博客 592

PWN-0x01 栈溢出

PWN-0x01 栈溢出 2020.05.29 目的:get shell 0x01 栈的工作原理 栈:一种先入后出的数据结构 被用于函数的局部内存管理(局部变量、调用信息) 栈往低地址方向增长 esp永远指向栈顶 push ebp #把ebp的值压入栈顶 esp=esp-4 mov ebp,esp #esp值存入ebp sub ebp,0x10 #栈顶指针往上提,留出局部变量的空间 . . . leave ret #leave 相当于以下操作 mov esp,ebp #

weixin_45871465的博客 155

GDB初使用

我们前面所有的操作,都是基于“有 C 源码、有 -g 参数”的理想情况——但在真实的 CTF Pwn 比赛中,题目通常只有编译好的二进制程序(没有 test.c 源码,也没有 -g 参数),我们无法看到 C 语言代码,只能看到程序的“底层语言”——汇编代码。Pwn 的终极目标(比如栈溢出),就是劫持 rip 寄存器(指令指针寄存器),让它指向我们的恶意代码。在 Pwn 调试中,只看变量名是不够的——变量名是编译器给我们的“便利”,而程序真正运行时,数据是存在内存中的,指令是存在 CPU 寄存器中的。

2501_90683768的博客 602

Linux程序崩溃调试实战:从Core Dump到Backtrace的完整指南

本文提供了一份Linux下C/C++程序崩溃调试的完整实战指南。详细讲解了如何开启Core Dump生成内存快照,以及如何利用GDB分析Core文件和Backtrace调用栈来精准定位崩溃点。文章涵盖了从编译选项、静态/动态库调试到程序内建Backtrace捕获的进阶技巧,并分享了生产环境下的调试策略与经验,帮助开发者高效诊断和解决Segmentation fault等崩溃问题。

weixin_29239661的博客 308

新手必看——超详细:[深育杯 2021]find_flag

pie与canary同时开启,并且有格式化字符串。

IT_huanhuan的博客 2064
上一篇: hitcon lab1-lab14
下一篇: 2018护网杯pwn
Maxmalloc
博客等级 码龄8年 12粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值