patchelf后使用堆栈指令时提示无符号信息

做 pwn 题时,经常会遇到题目使用的 libc 版本与自己的虚拟机版本不同的情况,虽然有装各个大版本的 wsl,但是未免还是会遇到一些小的版本需要亲手去调一调。

查看本机 libc 版本:

ldd --version

使用 patchelf 修改链接后,会发现在使用 gdb 调试程序时,堆栈指令用不了了,记录一些遇到这种问题的解决方法。
在这里插入图片描述

heap: This command only works with libc debug symbols.
They can probably be installed via the package manager of your choice.
See also: https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html

E.g. on Ubuntu/Debian you might need to do the following steps (for 64-bit and 32-bit binaries):
sudo apt-get install libc6-dbg
sudo dpkg --add-architecture i386
sudo apt-get install libc-dbg:i386

问题分析

libc.so 文件为包含代码的、加载进目标进程地址空间的文件,一般发布时不带调试信息,直接使用这种 .so 文件加载,在 pwndbg 中使用 bins, heap 等命令将会提示无符号信息。在 gdb 里输入命令:

show debug-file-directory

在这里插入图片描述

可以发现单独调试信息文件的目录在 /usr/lib/debuglibc.dbg 文件与 .so 文件在存储时是独立的两个文件,其中 .dbg 文件中仅包含调试符号信息,不包含代码。

解决方法

我的做法直接将上述的 debug 文件替换成对应 libc.debug 文件,当然在做这一步前应该要确保之后能恢复到原来的环境,或许可以先给虚拟机打个快照。

建议先将原本的 debug 文件拷贝一份到别的地方,方便在调试完之后恢复,这样就能省去打快照、恢复快照的功夫!!!

改 debug 文件的命令如下:

sudo rm -rf /usr/lib/debug
sudo cp -r ~/glibc-all-in-one/libs/2.31xxx/.debug/ /usr/lib/debug

恢复(这里我是将原本的 debug 文件放到了桌面):

sudo rm -rf /usr/lib/debug
sudo cp -r /home/wei/Desktop/debug/ /usr/lib/debug

参考

pwntools加载指定版本libc_pwn libc.so文件_weixin_44164182的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值