为应用程序编写程序函数覆盖

农业机械2021年09月06日

新傲虎优良的操控功底还算不出所料的话 选项 RTLD_LAZY 推迟解析 dll 的外部引用,直到 dll 被执行。 选项 RTLD_NOW 在 dlopen 返回之前解析所有的外部引用。 dlsym 返回入口点 printUPPERCASE 的地址。 调用 printUPPERCASE 并且打印修改过的消息“HELLO WORLD”。 dlclose 关闭到 的句柄,并且从内存中取消 dll 映射。 dlopen 使用基于环境变量 LD_LIBRARY_PATH 的相对路径查找共享目标路径,来打开 lowercase dll 的共享目标文件 ,并且返回句柄。 dlsym 返回入口点 printLowercase 的地址。 调用 printLowercase 并且打印修改过的信息“hello world”。 dlclose 关闭到 的句柄,并且从内存中取消 dll 映射。 注意,每次调用 dlopen、dlsym 或 dlclose 之后,调用 dlerror 以获取最后的错误信息,并且打印该错误信息字符串。以下是 dlTest 的测试运行:      dlTest 2-Original message   HeLlO WoRlD   dlTest 3-Open Library with absolute path return-(null)-    dlTest 4-Find symbol printUPPERCASE return-(null)-   HELLO WORLD   dlTest 5-printUPPERCASE return-(null)-    dlTest 6-Close handle return-(null)-   dlTest 7-Open Library with relative path return-(null)-    dlTest 8-Find symbol printLowercase return-(null)-   hello world   dlTest 9-printLowercase return-(null)-    dlTest 10-Close handle return-(null)-

完整的 dlTest.c、UPPERCASE.c 和 lowercase.c 源代码清单在本文后面的清单里。 构建 dlTest 启用运行时动态链接需要三步: 将 dll 编译为位置无关代码; 创建 dll 共享目标文件; 编译主程序并同 dl 库相链接。 编译 UPPERCASE.c 和 lowercase.c 的 gcc 命令包含 -fpic 选项。选项 -fpic 和 -fPIC 导致生成的代码是位置无关的,重建共享目标库需要位置无关。-fPIC 选项产生位置无关的代码,这类代码支持大偏移。用于 UPPERCASE.o 和 lowercase.o 的第二个 gcc 命令,带有 -shared 选项,该选项产生适合于动态链接的共享目标文件 a*.so。 用于编译和执行 dltest 的 ksh 脚本如下:     #!/bin/ksh  # Build shared library  #  #set -x  clear    #  # Shared library for dlopen absolute path test  #  if [ -f UPPERCASE.o ]; then rm UPPERCASE.o  fi  gcc -c -fpic UPPERCASE.c  if [ -f ]; then rm   fi  gcc -shared -lc -o UPPERCASE.o     #  # Shared library for dlopen relative path test  #  export LD_LIBRARY_PATH=`pwd`  if [ -f lowercase.o ]; then rm lowercase.o  fi  gcc -c -fpic lowercase.c  if [ -f ]; then rm   fi  gcc -shared -lc -o lowercase.o    #  # Rebuild test program  #  if [ -f dlTest ]; then rm dlTest  fi  gcc -o dlTest dlTest.c -ldl  echo Current LD_LIBRARY_PATH=$LD_LIBRARY_PATH  dlTest

结束语 创建能在运行时被动态链接到 Linux 系统上的应用程序的共享目标代码是一项非常简单的练习。应用程序通过使用对动态链接装入器的 dlopen、dlsym 和 dlclose 函数调用来获取对共享目标文件的访问。dlerror 以字符串的形式返回任何错误,这些错误信息字符串描述 dl 函数碰到的最后一个错误。在运行时,主应用程序使用绝对路径或相对于 LD_LIBRARY_PATH 的相对路径找到共享目标库,并且请求所需的 dll 入口点的地址。当需要时,也可对 dll 进行间接函数调用,最后,关闭到共享目标文件的句柄,并且从内存中取消该目标文件映射,使之不可用。

思密达和必奇治疗腹泻哪个更快
济南治白癜风较好医院
随州哪有专治白癜风医院
相关阅读
鬼马少女雨的玛丽珍鞋

不少姐弟都换清凉穿戴搭了,如果再次穿戴鞋子、小白鞋这类不透气的鞋子,...

2024-09-08
你说是因为你对我的爱教化了我

你却说是因为你对我的真爱感化了我,使我能这样同在的真爱你,能这样一点...

2024-06-02
女生多大需要涂眼霜?不是25岁也不是30岁,大部分人或许仅仅只是了

身体健康是妳最憎恨但却不得已去面对的话题之一,一个人的身体健康最微小...

2024-04-21
关乎大资金动向!科创板“芯片”指数来了,42只样本股名单公布;上交所几大指数也调整,腾讯、美团等权重

A股、公司股票多个极其重要指标公布或修正,这意味着之外的大资金样式也...

2024-04-16
吹拉弹颂唱响曲(二)——观赏《往日国乐》两年情思小结

原文 / 米木桥 吹拉枪弹诗天天向上歌 —游玩《日星西乐》两年情思小结 20...

2024-04-13
懂得念人之好,是职边锋更高级别的情商

我们都听感叹过《伊索暗喻》里头,农人与毒蛇的情节。 那是一个寒冷的夜...

2024-04-07
友情链接