IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux系统中程序的interpreter、rpath和patchelf命令的使用 -> 正文阅读

[系统运维]Linux系统中程序的interpreter、rpath和patchelf命令的使用

前言?

? ? ? ? 在Linux程序的执行时,通过读取ELF文件中的rpath和interpreter字段,加载程序需要的依赖库。

rpath

????????rpath全名run-time search path,是elf文件中一个字段,它指定了可执行文件执行时搜索so文件的第一优先位置,一般编译器默认将该字段设为空。elf文件中还有一个类似的字段runpath,其作用与rpath类似,但搜索优先级低,搜索优先级如下:

rpath > LD_LIBRARY_PATH > runpath > ldconfig缓存 > 默认的/lib,/usr/lib等

如果需要使用相对路径指定程序的rpath lib目录,可以使用ORIGIN变量,ld(加载器)会将ORIGIN理解成可执行文件所在的路径。如:

gcc -Wl,-rpath='$ORIGIN/../lib'    // 依赖库在程序的上一级,lib目录下

查看rpath命令:

readelf -d picToText        // picToText 为被查看rpath的程序名称

结果:

interpreter

????interpreter是elf文件中的一个字段(全名:Requesting program interpreter),它指定了动态库加载器的位置。程序启动时操作系统会先把控制权转交给ld-linux-x86-64.so.2,该so负责加载所有程序依赖的so,这个库在程序链接时自动设置。64bit程序一般为/lib64/ld-linux-x86-64.so.2。这个库的加载不受动态库搜索路径(RPATH,LD_LIBRARY_PATH等)约束,是因为在程序编译时,将这个加载器的路径写到二进制文件中了,而在二进制文件中标记的字段就是interpreter。如果要指定其它加载器,就要修改这个字段。

设置interpreter字段:

gcc -Wl,-rpath='/my/lib',-dynamic-linker='/my/lib/ld-linux.so.2'    // 设置lib/ld-linux.so.2 库的绝对路径到dynamic-linker

查看interpreter命令:

readelf -l picToText     // picToText 是被查看的程序名称

结果:

patchelf命令

功能

修改已经生成的elf程序rpath和interpreter值。

修改rpath

patchelf --set-rpath libDir app
// 1 libDir: 要设置到程序app中rpath的依赖库路径
// 2 app: 被设置的程序文件

# 也可以使用相对程序app的路径
patchelf --set-rpath `pwd`/path/libDir app

修改interpreter

patchelf --set-interpreter /usr/lib64/ld-linux.so.2 app
// 1 /usr/lib64/ld-linux.so.2 程序app要使用加载器的绝对路径
// 2 要设置的程序名称

# 也可以使用相对程序app的路径
patchelf --set-interpreter `pwd`/path/lib64/ld-linux-x86-64.so.2 app

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:53:55  更:2021-07-24 11:55:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 12:34:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码