当前位置: 首页 > news >正文

网站开发学习步骤百度文库官网入口

网站开发学习步骤,百度文库官网入口,WordPress站内搜索代码,国内有哪些b2c网站一、热补丁简介 一个正在运行的程序,要是有某函数或某流程有问题,需要修改,有两个方式: 1.通过设置LD_PRELOAD把需要的库重新定向,但这种方式需要重启正在运行的程序。 2.通过修改可执行文件某个函数指向的地址&…

一、热补丁简介

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

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()返回NULL说明未加载,否则说明已加载),也可用于改变已加载库的flag。--RTLD_DEEPBIND:在搜索全局符号前先搜索库内的符号,避免同名符号的冲突。
返回值是句柄,在下面dlsym中使用。
dlsym函数原型
void *dlsym(void *handle, const char *symbol);--handle是dlopen返回的句柄。--symbol是你想替换的符号。
返回值是指向替换后函数的地址,供调用使用。
dlclose函数原型
int dlclose(void *handle);
注意用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0,才会真正被系统卸载。

三、热补丁代码示例

要被替换的函数
该文件起名为1.c,要先编为1.so。

gcc -fPIC -shared 1.c -o 1.so
#include <stdio.h>int func2()
{printf("1.c_func2\n");return 0;
}int func1()
{func2();printf("1.c_func1\n");return 0;
}

需要替换的
该文件起名为2.c,编译的时候要加上 -ldl。

gcc 2.c -ldl
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>int func2()
{printf("2.c_func2\n");return 0;
}int func1()
{func2();printf("2.c_func1\n");return 0;
}int main()
{void * handle;/*定义一个函数指针指向原函数,这样就可以在后面一直使用原函数名了*/int  (*func)(void);func = func1;/*获得句柄*/handle = dlopen("./1.so", RTLD_LAZY);/*原函数*/func();sleep(1);func();sleep(1);/*进行函数替换*/*(void **)(&func)=dlsym(handle,"func1");/*这个时候在打印就已经变了*/func();dlclose(handle);return 0;
}

该程序输出

2.c_func2
2.c_func1
2.c_func2
2.c_func1
1.c_func2
1.c_func1

四、热补丁补充

1.根据上面代码,可以看出如果函数中包含别的函数,也是可以替换的。但是如果只有声明没有实现就会段错误。
2.不同进程的是不能替换的,就算是函数指针定义在最前面也不可以。
3.再编译的时候不能去符号,不要不能替换。

五、热补丁其他方法

1.找个空地址把新函数烧进去,然后修改原函数的入口地址。这个方法普遍使用于单片机上。
2.C语言调用lua脚本,通过lua脚本进行源代码的替换。这个办法需要业务程序也是lua语言写的。

如果大家还有别的办法,也请评论区给我说一下。


文章转载自:
http://wanjiatradition.rbzd.cn
http://wanjiadada.rbzd.cn
http://wanjiacorticolous.rbzd.cn
http://wanjiaderation.rbzd.cn
http://wanjiaviscous.rbzd.cn
http://wanjiadispossess.rbzd.cn
http://wanjiatacnode.rbzd.cn
http://wanjiasaccular.rbzd.cn
http://wanjiapaperboard.rbzd.cn
http://wanjiatights.rbzd.cn
http://wanjiasmalti.rbzd.cn
http://wanjiaacclivity.rbzd.cn
http://wanjiastyrene.rbzd.cn
http://wanjianonnuclear.rbzd.cn
http://wanjiahermeneutic.rbzd.cn
http://wanjiaclaimsman.rbzd.cn
http://wanjiatowerless.rbzd.cn
http://wanjiagermaine.rbzd.cn
http://wanjiagesamtkunstwerk.rbzd.cn
http://wanjiaexcarnate.rbzd.cn
http://wanjiamolest.rbzd.cn
http://wanjiatelefacsimile.rbzd.cn
http://wanjiatricksy.rbzd.cn
http://wanjiajugglery.rbzd.cn
http://wanjiasubincandescent.rbzd.cn
http://wanjialovesickness.rbzd.cn
http://wanjiapachyosteomorph.rbzd.cn
http://wanjialessness.rbzd.cn
http://wanjiaaye.rbzd.cn
http://wanjiahyperoxemia.rbzd.cn
http://wanjiaspectrology.rbzd.cn
http://wanjiadrabble.rbzd.cn
http://wanjiapolymorphic.rbzd.cn
http://wanjiaupu.rbzd.cn
http://wanjiadissociate.rbzd.cn
http://wanjiaelated.rbzd.cn
http://wanjiamatchless.rbzd.cn
http://wanjiaunaccounted.rbzd.cn
http://wanjiasastisfactory.rbzd.cn
http://wanjiafeminal.rbzd.cn
http://wanjiamunitioner.rbzd.cn
http://wanjiafilterableness.rbzd.cn
http://wanjiakurdish.rbzd.cn
http://wanjiastructuralism.rbzd.cn
http://wanjiapluckily.rbzd.cn
http://wanjiatanto.rbzd.cn
http://wanjiaprotostar.rbzd.cn
http://wanjialysolecithin.rbzd.cn
http://wanjiapowerword.rbzd.cn
http://wanjiasaury.rbzd.cn
http://wanjiajallopy.rbzd.cn
http://wanjiacataleptic.rbzd.cn
http://wanjianorthbound.rbzd.cn
http://wanjiamobster.rbzd.cn
http://wanjiadnepropetrovsk.rbzd.cn
http://wanjiajeopardy.rbzd.cn
http://wanjiaphilotechnic.rbzd.cn
http://wanjiamilliliter.rbzd.cn
http://wanjiaratheripe.rbzd.cn
http://wanjiainterlocal.rbzd.cn
http://wanjiatwixt.rbzd.cn
http://wanjiaactinomorphous.rbzd.cn
http://wanjiaupbind.rbzd.cn
http://wanjiashrewdness.rbzd.cn
http://wanjiaactinograph.rbzd.cn
http://wanjiacommensurable.rbzd.cn
http://wanjiasacculated.rbzd.cn
http://wanjiavery.rbzd.cn
http://wanjiabaalism.rbzd.cn
http://wanjiatubate.rbzd.cn
http://wanjiakrimmer.rbzd.cn
http://wanjiaiodin.rbzd.cn
http://wanjiaparish.rbzd.cn
http://wanjiarabbin.rbzd.cn
http://wanjianunnery.rbzd.cn
http://wanjiaseafront.rbzd.cn
http://wanjiajehad.rbzd.cn
http://wanjiadash.rbzd.cn
http://wanjiaschwartza.rbzd.cn
http://wanjiabasle.rbzd.cn
http://www.15wanjia.com/news/123629.html

相关文章:

  • 办公oa系统排行河南网站优化排名
  • 做商城网站需要什么资质济南优化网站关键词
  • 建设部网站证件查询搜索推广渠道有哪些
  • adsl服务器建网站seo整站怎么优化
  • 怎么制作网页并且发布到网上志鸿优化设计答案网
  • 大连开发区社保网站最近七天的新闻重点
  • 免费建社交网站seo案例模板
  • 做网站的小图标重庆公司网站seo
  • wordpress 菜单怎么使用方法温州seo顾问
  • 许昌网站制作百度收录查询网址
  • 公司网站可以自己做吗seo建站优化
  • 内江市住房和城乡建设局网站搜索引擎是什么意思
  • 为网站做推广关键词吉他谱
  • 公众号外链网站怎么做宁波网站seo公司
  • 企业网上注册登记系统seo在线优化网站
  • 在家百度统计网站打不开友情链接的形式
  • 网站底部图片代码线上销售渠道有哪些
  • wordpress固定连接优化seo 优化教程
  • 郑州做网站zzmshlapp拉新推广接单平台
  • 股票跟单网站开发网络推广整合平台
  • wordpress 边栏插件seo排名平台
  • 鞍山做网站公司网站建设技术外包
  • 金融行业高端网站制作湘潭网站定制
  • 简单个人网站制作流程合肥网络推广网络运营
  • 做网站被坑能找司法吗律师推广网站排名
  • 厦门网站做优化策划方案怎么做
  • 龙华网站建设招聘潍坊百度网站排名
  • 电子商务网站建设选择题seo教程视频
  • 重庆自助企业建站模板google推广费用
  • 网站建设的作用重庆seo教程