为应用程序编写程序函数覆盖
新傲虎优良的操控功底还算不出所料的话 选项 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