patchelf快速调用

基本使用

安装请参考这篇文章: https://blog.csdn.net/juluwangriyue/article/details/108617283

patchelf 修改 elf 文件加载指定版本的libc库

先用 --set-interpreter 这个选项来将旧的 ld.so(加载器) 替换为要加载的 ld.so


patchelf --set-interpreter /opt/libs/2.27-3ubuntu1_amd64/ld-2.27.so ./加载的

然后使用 --replace-needed这个选项将旧的 libc库 替换成要加载的 libc库

#第2个参数是程序原本的动态链接库的路径,可以用 ldd 命令查看目标文件获取,第3个参数是新的动态链接库的路径,第4个参数为要修改文件的路径。
patchelf --replace-needed libc.so.6 /opt/libs/2.27-3ubuntu1_amd64/libc-2.27.so ./patchelf

但是这样挺麻烦的,我们可以通过编写一个shell脚本实现快速使用

脚本调用

将代码保存为sh为后缀名的shell脚本即可。

如果每次通过路径调用脚本也非常麻烦,所以我们可以给脚本路径起一个别名实现快速调用。

如下

利用alias命令给脚本路径起别名,就像自定义了一个patch命令一样

在这里插入图片描述

这样我们在使用patch命令(原系统没有这个命令)的时候就是调用脚本的时候

如果你使用的是bash,只需要将下面这行代码添加到家目录下的.bashrc,然后 source .bashrc重载.bashrc文件即可

如果是zsh,就添加到家目录下的.zshrc即可。

注意:后面应该是你自己脚本存放的路径
在这里插入图片描述

这样调用的时候只需要第一个参数指定加载器和libc库的目录,第二个参数指定文件路径即可。

接下来演示一下,可以看到 s 文件原来的 libc 路径和 ld 加载器路径

在这里插入图片描述
通过patch修改

在这里插入图片描述查看修改结果,可以看到修改成功
在这里插入图片描述

脚本

#!/bin/bash
set -x
libc_path=$1
elf_path=$2
patchelf_bin_path="/usr/local/bin/patchelf"

# 检查参数
if [ -z "$libc_path" ] || [ -z "$elf_path" ]; then
				  echo "Usage: $0 <libc_path> <elf_path>"
					  exit 1
fi

# 找到 ld 文件
ld_file=$(ls ${libc_path}/ld-2.*.so 2>/dev/null | head -n 1)
if [ -f "$ld_file" ]; then
				  $patchelf_bin_path --set-interpreter "$ld_file" "$elf_path"
fi

# 找到 libc 文件
libc_file=$(ls ${libc_path}/libc-2.*.so 2>/dev/null | head -n 1)
if [ -f "$libc_file" ]; then
				  $patchelf_bin_path --replace-needed libc.so.6 "$libc_file" "$elf_path"
fi

set +x

后言

这里先给大家道个歉
因为这两天放假回家,导致时间很少,所以这几天会有点水
等后面到家再二开一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值