[pwn之路]patchelf之后,加载符号表!
# 前言
当你在进行二进制漏洞学习和利用时,经常需要使用调试工具来分析和理解程序的内部工作。在之前的交流中,我们提到了如何使用patchelf来修改二进制文件[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势,以适应调试的需求,但没有详细介绍如何加载符号表。实际上,对于学习和利用二进制漏洞,符号表是非常重要的资源,因为它们提供了关键的函数和变量名称,使调试和分析更加轻松。
有些人可能会建议使用虚拟机来解决这个问题,但这通常会涉及到一些繁琐的设置和维护工作。幸运的是,你可以利用强大的工具如pwndbg以及glibc-all-in-one项目,来轻松加载符号表,无需复杂的虚拟机设置。
在下文中,我们将详细介绍如何使用pwndbg的加载符号表功能,以及如何结合glibc-all-in-one项目自动下载符号表来简化调试过程。这个方法不仅方便,还能帮助你更好地理解和利用二进制漏洞,提高你的漏洞研究和利用技能。让我们一起来探索这个强大的调试工具和资源吧!
脚本获取,配置
执行vim ~/.pwndbg/gdbinit.py
然后复制下方代码到最底下,然后输入:wq回车,保存退出。
import gdb
import os
# ANSI颜色转义码
COLOR_GREEN = "\033[32m" # 绿色
COLOR_RED = "\033[31m" # 红色
COLOR_RESET = "\033[0m" # 重置颜色
# 递归加载符号文件的函数
def load_symbols_recursive(folder_path):
# 获取文件夹下的所有内容,包括子文件夹
items = os.listdir(folder_path)
for item in items:
item_path = os.path.join(folder_path, item)
if os.path.isfile(item_path):
try:
gdb.execute("add-symbol-file {}".format(item_path))
print(COLOR_GREEN + "[+] Loaded symbols " + COLOR_RESET + "from {}".format(item_path))
except gdb.error as e:
print(COLOR_RED + "[-] Failed to load" + COLOR_RESET + " symbols from {}: {}".format(item_path, e))
elif os.path.isdir(item_path):
load_symbols_recursive(item_path) # 递归处理子文件夹
# 创建一个自定义的GDB命令,用于递归加载文件夹及其子文件夹中的所有符号文件
class LoadSymbolsRecursively(gdb.Command):
def __init__(self):
super(LoadSymbolsRecursively, self).__init__("loadfolder", gdb.COMMAND_USER)
def invoke(self, arg, from_tty):
# 解析参数为文件夹路径
folder_path = arg.strip()
if not folder_path:
print("Usage: loadfolder <folder_path>")
return
# 检查文件夹是否存在
if not os.path.exists(folder_path) or not os.path.isdir(folder_path):
print(COLOR_RED + "[-] Folder does not exist: {}".format(folder_path) + COLOR_RESET)
return
# 调用递归函数来加载符号文件
load_symbols_recursive(folder_path)
LoadSymbolsRecursively()
使用
运行pwndbg时,输入loadfolder /path/to/glibcallinone/libs/your_glibc_version/.debug/.build-id/
比如我最近在做一道题目,运行的是loadfolder /home/N1nE/ctf/tools/glibcallinone/libs/2.34-0ubuntu3_amd64/.debug/.build-id/。
重复加载问题
调试过程中,如果需要重新加载,直接ctrl+r,输入load就会出现刚才输入过的命令,重新加载即可,无需重新输入。
[pwn之路]patchelf之后,加载符号表!的更多相关文章
- windbg加载符号表
0x00 前言 在使用windbg调试windows中的程序时会经常碰到一些系统的dll里面的一些函数调用,有些函数是没有具体函数名的,这对于调试非常不利,基于此,微软针对windows也发布了很多系 ...
- IDA 与VC 加载符号表
将Windbg路径下的symsrv.yes 拷贝到ida 的安装目录,重新分析ntoskrnl.exe, 加载本地的符号表 添加环境变量 变量名:_NT_SYMBOL_PATH变量值:SRV*{$P ...
- 解决VS2012【加载......符号缓慢】的问题
http://blog.csdn.net/shi0090/article/details/19411777 最近在用VS2012调试时,经常出现"加载......符号缓慢的问题", ...
- 解决Visual Studio 加载符号卡死情况
VS 加载符号 过慢或卡死的情况都可以用这种方法 打开VS的[工具]-[选项]-[调试]-[符号], 如下图所示: 1. 先取消勾选 ”Microsoft符号服务器” 2. 再点击 “清空符号缓存” ...
- 在c++运行后出现PDB或者什么巴拉巴拉已经加载符号了的话
“stl常用排序算法.exe”(Win32): 已加载“E:\vs2015\project\stl常用排序算法\Debug\stl常用排序算法.exe”.已加载符号. “stl常用排序算法.exe”( ...
- VC编译的时候因为加载符号导致编译过程异常缓慢的处理
之前调试console程序用了一下Ctrl+C,弹出的异常处理选择框自己点了什么忘记了,结果之后再调试,发现特别慢,最下面一直在走着一系列dll的加载符号.让我特别二呼的是断网的话就没事了,联网就一直 ...
- 为加载......符号 vs2012调试缓慢解决方案
调试C#网站时vs2012一直 为xxx加载符号 本机上的2010 2017 没有此毛病 没一步都要等待好几秒,百度狗狗(大概花了半天时间)后的方法无果 最后在vs官方论坛 好多老外说删除全部断点就行 ...
- Visual studio 正在从以下位置加载符号:Microsoft符号服务器 尝试取消禁用后续符号加载
正在从以下位置加载符号:Microsoft符号服务器 尝试取消禁用后续符号加载 进入VS---工具---选项----调试----符号,看右边有个“Microsoft符号服务器”,将前面的勾去掉,( ...
- 【EF学习笔记08】----------加载关联表的数据 显式加载
显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ...
- kylin加载hive表错误:ERROR [http-bio-7070-exec-10] controller.TableController:189 : org/apache/hadoop/hive/conf/HiveConf java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法
一.问题背景 在kylin中加载hive表时,弹出提示框,内容是“oops!org/apache/hadoop/hive/conf/HiveConf”,无法加载hive表,查找kylin的日志时发现, ...
随机推荐
- freeswitch修改mod_sofia模块并上报自定义头域
概述 在之前的文章中,我们介绍了如何使用fs的event事件机制来获取呼叫的各种信息. 这些event事件一般都是底层模块定义好的,其中的各种信息已经很完备了,日常的开发需求都可以满足. 但是,总有一 ...
- C语言基础之第一个C程序
前言 在开始学习 C 语言的基础知识之前,我们需要学习如何编写.编译和运行第一个 C 程序. 要编写第一个 C 程序,打开 C 控制台并编写以下代码,我这里直接使用vs2022进行代码的编写: #in ...
- webflux 的使用总结
本文为博主原创,未经允许不得转载: 1. Servlet 3.0 简介 2. WebFlux 简介 及 特点 3. 基于函数式的 WebFlux 开发 4. webFlux 全局异常 5. webF ...
- [转帖]性能优化:Swap调优
目标:解决大量Log写入占用大量的File Cache,内容利用不充分导致swap 基本原则:尽量使用内存,减少swap,同时,尽早flush到外存,早点释放内存给写cache使用.---特别在持续的 ...
- [转帖]TiDB 数据库统计表的大小方法
简介:TiDB统计表的大小,列出了一些方法: 1.第一种的统计方式: 基于统计表 METRICS_SCHEMA.store_size_amplification 要预估 TiDB 中一张表的大小,你可 ...
- [转帖]TiDB 环境与系统配置检查
https://docs-archive.pingcap.com/zh/tidb/v6.0/check-before-deployment 本文介绍部署 TiDB 前的环境检查操作,以下各项操作按优先 ...
- [转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量
tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器. tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包.Wireshark 除了可 ...
- [转帖]SSL数字证书分类DV/OV/EV
SSL证书的分类主要是通过下面两个维度进行分类: 1.根据验证模式分类 根据CA机构对申请者的身份审核范围分为:DV证书.OV证书.EV证书. 1.1.DV证书(域名证书) DV(Domain Val ...
- [转帖]Arm发布CortexX4,功耗可降低40%
https://www.eet-china.com/mp/a224124.html ARM 发布了新一代的移动处理器内核,包括 Cortex-X4.Cortex-A720.Cortex-A520,预计 ...
- [转帖]36.堆空间的参数设置和-XX:HandlePromotionFailure
目录 1.堆空间参数 2.-XX:HandlePromotionFailure 1.堆空间参数 * -XX:+PrintFlagsInitial : 查看所有的参数的默认初始值 * -XX:+Prin ...