con*_*st6 6 c malloc linker dynamic-linking
我编写了一个使用标准C原型实现malloc/calloc/realloc/free的自定义库,我想出了如何编译它.我想通过链接标准应用程序来测试库吗?这样做有什么好办法?一旦我有一个工作库,我假设我可以用LD_PRELOAD加载它,但是如何使我的函数与其共存但优先于系统库?我的函数需要调用malloc才能让内存运行,所以我不能完全抛弃stdlib ...帮助?
小智 4
您尝试替换的函数是标准 C 函数,而不是宏,也不是系统调用。因此,您必须简单地为您的函数提供相同的名称并将它们编译到共享库中。
然后,用于LD_PRELOAD在二进制文件启动之前预加载您的库。由于所有地址都被解析一次,链接器将找出函数的地址并记住它们的名称,并且以后不会在标准库中查找它们。
如果您的程序与标准运行时静态链接,则此方法可能不起作用。此外,它不适用于 Mac OS X,因为还有另一个用于插值的 API。
例如,在Linux中,为了使您的函数共存(即,如果您想malloc在自己的实现中使用系统malloc),您必须使用手动打开标准库dlopen,查找您需要的函数dlsym并调用它们稍后按地址。
| 归档时间: |
|
| 查看次数: |
2054 次 |
| 最近记录: |