author: Tamako

先上两个美化的链接,不用zsh的

字体

样式,颜色

成品

切换libc

我的工具机是Ubuntu 18.04。

获取libc版本

这个很容易,通过运行libc就可以直接获取,比如buu的Ubuntu16.04 32位机使用的libc

当然有些libc运行的时候会出现错误,这个时候放到ida里面反编译一下就可以了,效果是一样的。

实际上用 strings 指令也可以 strings libc.so.6 | grep "ubuntu",简单快捷

编译libc

准备工作

考虑到现在见到的都是2.23版本的libc,所有就只编译了这个版本

为了编译旧版本的libc,最好用旧版本的gcc,所以我们考虑安装一下,好消息是不同版本的gcc是可以共存的。

首先添加旧版本的镜像源。使用 sudo vim /etc/apt/sources.list添加

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe

然后 sudo apt-get update更新源。

安装旧版本的gcc

sudo apt-get install gcc-4.8
sudo apt-get install gcc-4.8-multilib
sudo apt-get install g++-4.8
sudo apt-get install g++-4.8-multilib
sudo apt-get install gcc-5
sudo apt-get install gcc-5-multilib
sudo apt-get install g++-5
sudo apt-get install g++-5-multilib

添加到维护程序版本的 update-alternatives

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7

通过 sudo update-alternatives --config gcc就可以切换版本了

编译2.23版本的libc时我们选择gcc-4.8

安装glibc-all-in-one

编译各个版本libc

git clone https://github.com/matrix1001/glibc-all-in-onecd glibc-all-in-onechmod 777 build download extractsudo ./build 2.29 amd64     #编译glibc
sudo ./build 2.27 amd64

没有编译32位的版本,考虑到32位用的少

位置在2.27和2.29的ld和libc在/glibc/2.2?/amd64中

但是2.23考虑了32位版本,采用手动编译

tar -zxvf glibc-2.23.tar.gz
cd glibc-2.23

建立目录并完成设置

64位
mkdir build64
cd build64
sudo CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" ../configure --prefix=path_to_install
sudo make
sudo make install
32位
mkdir build32
cd build32
sudo CC="gcc -m32" CXX="g++ -m32" CFLAGS="-g -g3 -ggdb -gdwarf-4 -Og -Wno-error" CXXFLAGS="-g -g3 -ggdb -gdwarf-4 -Og" ../configure --prefix=/glibc/2.23/32 --host=i686-linux-gnu
sudo make
sudo make install

编译的时候报错了,解决方法如下

解决办法就是在这2个变量后面加 __attribute__ ((nocommon))。他们在/glibc-2.23/misc/regexp.c中(第33行开始的)。

然后还是报错,发现还有这个。

也要改,三个都在一起,恒容易找到

记住改掉之后,重新make

这里我考虑使用patchelf

可以使用apt-get安装

sudo apt-get install patchelf

然后

patchelf --set-interpreter ./ld-linux.so.2 ./elfnamepatchelf --replace-needed libc.so.6 ./libc-2.23.so ./elfname或者patchelf --set-interpreter ./glibc-all-in-one-master/libs/2.31-0ubuntu9.2_amd64/ld-2.31.so --set-rpath ./glibc-all-in-one-master/libs/2.31-0ubuntu9.2_amd64 target_file

看这里

都试了一下,最好使的还是repath

patchelf --set-repath xxxxxxx pwn

xxxx是路径文件夹的路径,不过有个缺点就是只能放一个libc和ld。

patchelf --set-rpath ~/Desktop/vnctf2021/ff/ ff例子。

这样的指令就可以设置了。第一条替换了ld,第二条替换了libc。第二条中的 libc.so.6 是目标文件 libc 软连接的名字,需要通过 ldd 指令来查看(一般都就是 libc.so.6

libc编译遇到的错误

pwn本地加载libc

但是32位安装报错一直没有解决,两个多小时遂放弃。

运行不同版本libc相关推荐

  1. 解决Firefox已阻止运行早期版本Adobe Flash

    解决Firefox已阻止运行早期版本Adobe Flash 类别    [随笔分类]web 解决Firefox已阻止运行早期版本Adobe Flash 最近火狐浏览器不知抽什么风,每次打开总提示&qu ...

  2. 阿里云上运行Docker版本的PostgreSQL

    阿里云上运行Docker版本的PostgreSQL 最近公司项目上用到PostgreSQL9.3.24, 需要搭建一套PostgreSQL测试环境. 正好最近阿里云双11优惠幅度巨大,果断入手一台2核 ...

  3. 将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决

    将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决 参考文章: (1)将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决 (2)ht ...

  4. 我正在运行哪个版本的PostgreSQL?

    本文翻译自:Which version of PostgreSQL am I running? I'm in a corporate environment (running Debian Linux ...

  5. mvcnn代码详解_使用colab运行tensorflow版本的faster-rcnn

    ** 在colab下运行tensorflow版本的faster- rcnn ** 操作流程 操作过程我已经录成视频上传至B站,链接为 https://www.bilibili.com/video/BV ...

  6. LibcSearcher找不到合适的libc(更新到python3版本Libc)

    LibcSearcher找不到合适的libc(更新到python3版本Libc) 如果你是用的基于python2的LibcSearcher,可以安装python3版本的libcsearcher htt ...

  7. Tom围棋(弈城围棋)运行错误:当前运行的版本是系统无法识别的版本

    从http://duiyi.sports.tom.com/service/download.htm 下裁TOM围棋安装后. 管理员级别的用户可以正常运行,但是受限用户就报错:"当前运行的版本 ...

  8. Windows10下使用批处理脚本更改jdk以及java运行时版本

    前言: 先来说明一下个人计算机上的一些情况,个人笔记本上最开始安装的jdk是11版本,后来因为开发需求改为了1.8,到最近安装BurpSuit2021版本又需要高版本的java环境于是又解压了一个jd ...

  9. CTF pwn中利用pwntools加载不同版本libc调试程序的方法

    在网上找到了很多加载libc的帖子,终于自己走通了一次,现在把方法和资源都整理一下 一.解决方案 python利用pwntools的代码 from pwn import * import pwnlib ...

  10. ride.py在运行python3.×版本后导致无法运行及解决办法

    最近一直在自学python自动化,网上看到rf框架挺适合初学自动化测试,于是通过虫师的搭建了rf框架, 但是在使用过程中遇到了一个问题,在网上没有找到明确解决办法于是想到记录一下 之前为了搭建rf框架 ...

最新文章

  1. android开发--ListView中的getView原理
  2. 初探 MySQL 的 Binlog
  3. 我的4条产品设计工作观
  4. VS2008如何添加 OLE/COM 对象查看器 .
  5. hi3516配置wifi_HISI 3516A移植mt7601u的wifi驱动
  6. ios如何判断键盘是否已经显示
  7. android状态机是线程么,Java中的线程状态机 - java
  8. 前端学习(2840):nevagator导航标签
  9. c语言改错和填空能运行吗,C语言改错填空编程
  10. SQLmap常用命令/使用教程
  11. 数据分析没价值?——深思对业务的洞察有多少?
  12. 10.Doctrine2 (2)
  13. C#——已知两点及半径,求圆心坐标
  14. nmake comment
  15. 龙芯3A3000 PCI 硬件问题
  16. Service与Android系统设计-- libbinder 转载
  17. Django模型之Meta属性详解
  18. Ideas Of MySelf 20005-07-26
  19. 1003a+-*/b
  20. 计算机网络(2)传输层

热门文章

  1. 基于VGG的图像多标签分类算法详解及实践
  2. win7开机rpc服务器不可用进不了系统,win7系统提示rpc服务器不可用怎么解决
  3. Tableau同比或环比计算方法
  4. Win10 快捷操作
  5. 计算机识别人脸原理,深入浅出人脸识别原理
  6. arduino烧录_用Arduino UNO烧录Attiny85芯片
  7. Boost电路硬件设计实例
  8. Word导出PDF出现空白页
  9. 万用表(数字多电表)的认识与使用
  10. c语言用串口读温度值,温度传感器与串口