【Linux】LD_PRELOAD用法
转载https://blog.csdn.net/iEearth/article/details/49952047
还有一篇博客也可以看看https://blog.csdn.net/xp5xp6/article/details/52513428
https://www.cnblogs.com/openix/p/3521166.html
/etc/ld.so.conf详解 :
https://www.cnblogs.com/chris-cp/p/3591306.html
LD_PRELOAD,是个环境变量,用于动态库的加载,动态库加载的优先级最高,一般情况下,其加载顺序为LD_PRELOAD>LD_LIBRARY_PATH>/etc/ld.so.cache>/lib>/usr/lib。程序中我们经常要调用一些外部库的函数,以malloc为例,如果我们有个自定义的malloc函数,把它编译成动态库后,通过LD_PRELOAD加载,当程序中调用malloc函数时,调用的其实是我们自定义的函数,下面以一个例子说明。
// test.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
for (; i < 5; ++i) {
char *c = (char*)malloc(sizeof(char));
if (NULL == c) {
printf("malloc fails\n");
}
else {
printf("malloc ok\n");
}
}
return 0;
}
编译运行,结果如下:
$gcc -o test test.c
$./test
malloc ok
malloc ok
malloc ok
malloc ok
malloc ok
可以看出,程序运行没有问题,我们稍作修改,自定义malloc。
// preload.c
#include <stdio.h>
#include <stdlib.h>
void* malloc(size_t size)
{
printf("%s size: %lu\n", __func__, size);
return NULL;
}
然后把自定义的malloc打包为动态库。
$gcc -shared -fpic -o libpreload.so preload.c
接着使用LD_PRELOAD加载libpreload.so,看看情况如何:
$LD_PRELOAD=./libpreload.so ./test
malloc size: 1
malloc fails
malloc size: 1
malloc fails
malloc size: 1
malloc fails
malloc size: 1
malloc fails
malloc size: 1
malloc fails
看到了吧,5次malloc都失败了,如果不知道是 LD_PRELOAD在作怪,那可能分析很长时间都找不出原因所在。这个 LD_PRELOAD就是把双刃剑,用好了可以帮助我们,如果别有用心,那可能会有意外的惊喜。
--------------------- 作者:aidear_evo 来源:CSDN 原文:https://blog.csdn.net/iEearth/article/details/49952047?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
【Linux】LD_PRELOAD用法的更多相关文章
- linux curl用法详解
linux curl用法详解 curl的应用方式,一是可以直接通过命令行工具,另一种是利用libcurl库做上层的开发.本篇主要总结一下命令行工具的http相关的应用, 尤其是http下载方面 ...
- [转载]expect spawn、linux expect 用法小记
原文地址:expect spawn.linux expect 用法小记作者:悟世 使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写 ...
- [转帖]linux lsof 用法简介
linux lsof 用法简介 https://www.cnblogs.com/saneri/p/5333333.html 1.简介: lsof(list open files)是一个列出当前系统打开 ...
- Linux find 用法示例
Linux中find常见用法示例 ·find path -option [ -print ] [ -exec -ok command ] {} \; find命令的参数 ...
- linux gksu用法
apt-get install gksu gksu是linux下图形化的su/sudo工具 sudo 用来执行命令行(CLI)程序 gksu 用来执行图形的(GUI)程序 GUI = Graphica ...
- linux exec用法总结
Linux中exec的用法总结 先总结一个表: exec命令 作用 exec ls 在shell中执行ls,ls结果显示结束后不返回原来的的目录中,而是/(根目录) exec <file 将fi ...
- Linux man 用法小结(Linux指令学习笔记)
今天买了一本<<Linux命令行与shell脚本编程大全>>,想利用暑假放假的时间系统的学习一下 Linux的shell脚本.今天看了一下书,才发现我之前学习,把Linux s ...
- linux定时器用法
linux定时器 原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...
- Linux find用法
Linux中find常见用法示例 ----摘抄哪里忘记了 ·find path -option [ -print ] [ -exec -ok command ] {} ...
随机推荐
- 第一篇-Git基础学习
学习网址: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758410 ...
- WebService 及 CXF 的进阶讲解
4.2. WebService请求深入分析 1). 分析WebService的WSDL文档结构 1.1). 实例截图 <definitions> <types> <sch ...
- c#中序列化和反序列化的理解
using System.IO;using System.Runtime.Serialization.Formatters.Binary; 序列化:对象转化为文件的过程(字节流) 反序列化:文件(字节 ...
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:co
在pom中加入下面代码: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId&g ...
- memcached 在windows中的部署和使用
第一步:下载memcached 地址:http://www.121down.com/soft/softview-28366.html 第二步:将下载文件解压到文件目录后,打开命令窗口 通过cd命令 ...
- 字符缓冲流BufferedWriter BufferedReader
//字符缓冲流主要用于文本数据的高速写入 package cn.lijun.demo1; import java.io.BufferedReader; import java.io.FileNotFo ...
- 25 个常用的 Linux iptables 规则
# 1. 删除所有现有规则 iptables -F # 2. 设置默认的 chain 策略 iptables -P INPUT DROP iptables -P FORWARD DROP ipta ...
- Javascript鼠标键盘事件
鼠标事件click:单击dblclick:双击mousedown:鼠标按下mouseup:鼠标抬起mouseover:鼠标悬浮mouseout:鼠标离开mousemove:鼠标移动mouseenter ...
- Jz2440 环境安装
目录 Jz2440 环境安装 Ubuntu 设置 烧写工具 交叉编译环境 使用说明 烧写特性 title: Jz2440 环境安装 tags: linux date: 2018-09-20 22:56 ...
- Servlet_问题总结
1.Servlet转发到JSP后页面的CSS样式丢失,页面布局混乱,原来能点的链接现在失效 原因:原来前台页面(JSP|HTML)在引用静态资源(CSS|JS|JSP页面)时使用的是相对路径, 导致由 ...