《C专家编程》中提到了 interpositioning
,即自定义函数如果与库函数名重名可能会导致未定义的行为,为避免发生问题,建议尽量使用 static
关键字将函数作用域约束在本源文件中。
interpositioning
中文资料较少,不知道翻译成中文怎么说(打桩问题?重载?)。在纽约大学网站上找到了一份示例代码,可查看 Index of /~acase/fa14/cs201/demos/interpositioning,示例代码将 interpositioning
分了三类,编译、链接、运行时的interpositioning
。
interpositioning
示例代码 打包下载,可在 CentOS 7 x86_64 系统上直接编译运行,可使用 locate
定位so库具体位置。
[root@localhost interpositioning]# locate libdl.so /usr/lib64/libdl.so /usr/lib64/libdl.so.2 [root@localhost interpositioning]# LD_PRELOAD="/usr/lib64/libdl.so ./mymalloc.so" ./hello
遗留问题:需要研究
LD_PRELOAD
,感觉代码里的printf()
内调用的free()
不是自定义的free()
。