在平时做题的时候给的libc基本上都是去除了调试符号的ibc,而没有调试符号会使得pwngdb中heap bins等命令不可用,导致我这种新手调试起来碍手碍脚。
当然也有很多中方式获得带调试符号的libc,例如:
使用patchelf也不能很好的解决问题。虽然可以使用eu-unstrip将调试符号附加到文件中,但是最遗憾,虽然上面有各个libc的版本的最新和初始版本,却不曾见到每个libc的每个小版本。
在这里可以找到libc版本的发行历史
Ubuntu glibc package
可以直接运行libc文件查看libc子版本
或者使用strings命令查找
已经由大佬写了自动下载脚本
zeyugao / glibc-launchpad
也可以点进list中手动下载需要版本的libc以及调试符号deb文件
释放deb得到libc和调试符号
可执行文件libc
调试符号libc:(虽然看起来可以执行,但是里面只有符号表)
有关调试符号和strip的基本概念可以看一下这篇文章:
深入理解debuginfo
将libc和调试符号放到同一个目录下方便操作
eu-strip和eu-unstrip都在elfutils这个包中,所以要先安装elfutils
可以看到,符号文件的大小变大了,说明是将不带符号的libc给直接附加到了符号上面,因为都是elf文件,所以能这么操作。
给libc-2.27_sym.so和ld-2.27.so加一下执行权限:
可以看到现在的libc-2.27_sym.so既能够运行查看版本,有带有调试符号了
p
=
process([
"./ld-xxx.so"
,
"./file"
],
env
=
{
"LD_PRELOAD"
:
"./libc-xxx.so "
})
p
=
process([
"./ld-xxx.so"
,
"./file"
],
env
=
{
"LD_PRELOAD"
:
"./libc-xxx.so "
})
.
/
libc
-
2.27
.so
GNU C Library (Ubuntu GLIBC
2.27
-
3ubuntu1
.
4
) stable release version
2.27
.
Copyright (C)
2018
Free Software Foundation, Inc.
This
is
free software; see the source
for
copying conditions.
There
is
NO warranty;
not
even
for
MERCHANTABILITY
or
FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version
7.5
.
0.
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https:
/
/
bugs.launchpad.net
/
ubuntu
/
+
source
/
glibc
/
+
bugs>.
.
/
libc
-
2.27
.so
GNU C Library (Ubuntu GLIBC
2.27
-
3ubuntu1
.
4
) stable release version
2.27
.
Copyright (C)
2018
Free Software Foundation, Inc.
This
is
free software; see the source
for
copying conditions.
There
is
NO warranty;
not
even
for
MERCHANTABILITY
or
FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version
7.5
.
0.
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https:
/
/
bugs.launchpad.net
/
ubuntu
/
+
source
/
glibc
/
+
bugs>.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课