C语言应用层程序热补丁

一、热补丁简介

一个正在运行的程序,要是有某函数或某流程有问题,需要修改,有两个方式:

1.通过设置LD_PRELOAD把需要的库重新定向,但这种方式需要重启正在运行的程序。
2.通过修改可执行文件某个函数指向的地址,指向新的函数,这种方式可不重启正在运行的程序。这就热补丁(hotpatch)。

二、热补丁使用

1.API介绍

Linux提供了一套API来动态装载库。热补丁主要使用如下API:
- dlopen,打开一个库,并为使用该库作些准备。
- dlsym,在打开的库中查找符号的值。
- dlclose,关闭库。

在使用一下API时,要提前包含头文件**#include <dlfcn.h>**

dlopen函数原型:
void *dlopen(const char *filename, int flags);
	--filename是你要打开的库路径
	--flags必须有RTLD_LAZY或者RTLD_NOW其中之一。
		RTLD_LAZY:在dlopen返回前,
				对于动态库中的未定义的符号不执行解析。(仅针对函数,变量立即解析)
		RTLD_NOW:需要在dlopen返回前,
		解析出所有未定义符号,如果解析不出来,在则会返回NULL和错误。
		***/*可以和一下参数进行搭配使用*/***
		--RTLD_GLOBAL:动态库中定义的符号可被其后打开的其它库解析。
		--RTLD_LOCAL:与RTLD_GLOBAL作用相反,动态库中定义的符号不能被其后打开的其它库重定位。
						如果没有指明是RTLD_GLOBAL还是RTLD_LOCAL,则缺省为RTLD_LOCAL。
		--RTLD_NODELETE:dlclose()期间不卸载库,并且在以后使用dlopen()重新加载库时不初始化库中的静态变量。
		--RTLD_NOLOAD:不加载库。可用于测试库是否已加载(dlopen(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值