尝试 link 到我使用 LD_PRELOAD 创建的共享库时出错
Error when trying to link to a shared library I created using LD_PRELOAD
我正在尝试测试是否可以通过 link 在 Linux 上共享库来覆盖 glibc 的 malloc 接口。我还没有 malloc 函数的详细信息。
所以我创建了一个 nullmalloc.cpp
,它具有所需的 malloc 替换,但所有 returns 都是空的。代码如下所示:
# include <cstddef>
void* malloc(size_t size) { return 0; }
void* calloc(size_t n, size_t size) { return 0; }
void free(void* ptr) { return; }
void* realloc(void* ptr, size_t size) { return 0; }
void* valloc(size_t size) { return 0; }
void* memalign(size_t align, size_t s) { return 0; }
void cfree(void* ptr) { return; }
void* aligned_alloc(size_t align, size_t s) { return 0; }
void* pvalloc(size_t size) { return 0; }
struct mallinfo mallinfo(void);
int mallopt(int cmd, int value) { return 0; }
然后我尝试通过这些命令创建 cpp 文件的共享库:
gcc -Wall -fPIC -g -c nullmalloc.cpp // creates nullmalloc.o
gcc -shared -Wl,-soname,nullmalloc.so -o nullmalloc.so nullmalloc.o // creates nullmalloc.so
当我使用 LD_PRELOAD 到 link nullmalloc.so
到我写的测试代码 test.cpp
时,我得到一个错误,说 .so 文件不能找到了。
我在 LD_PRELOAD 中使用的命令是这样的:
g++ -g test.cpp -o test.o -std=c++11 LD_PRELOAD=/home/nullmalloc/nullmalloc.so
我得到的错误是:
g++: error: LD_PRELOAD=/home/nullmalloc/nullmalloc.so: No such file or directory
我很困惑,因为当我使用 ls
命令时 nullmalloc.so
文件存在。
[root@a nullmalloc]$ ls
nullmalloc.cpp nullmalloc.o nullmalloc.so test.cpp
我才开始研究 malloc、linux 和共享库,所以我不确定我在哪里犯了错误。谁能就从哪里开始修复给出建议?
谢谢。
我不知道如何添加编译器标志,但您可以按如下方式使其工作。
照常编译测试:
g++ -Wall -g test.cpp -o test -std=c++11
像这样调用它:
LD_PRELOAD=/home/nullmalloc/nullmalloc.so ./test
我正在尝试测试是否可以通过 link 在 Linux 上共享库来覆盖 glibc 的 malloc 接口。我还没有 malloc 函数的详细信息。
所以我创建了一个 nullmalloc.cpp
,它具有所需的 malloc 替换,但所有 returns 都是空的。代码如下所示:
# include <cstddef>
void* malloc(size_t size) { return 0; }
void* calloc(size_t n, size_t size) { return 0; }
void free(void* ptr) { return; }
void* realloc(void* ptr, size_t size) { return 0; }
void* valloc(size_t size) { return 0; }
void* memalign(size_t align, size_t s) { return 0; }
void cfree(void* ptr) { return; }
void* aligned_alloc(size_t align, size_t s) { return 0; }
void* pvalloc(size_t size) { return 0; }
struct mallinfo mallinfo(void);
int mallopt(int cmd, int value) { return 0; }
然后我尝试通过这些命令创建 cpp 文件的共享库:
gcc -Wall -fPIC -g -c nullmalloc.cpp // creates nullmalloc.o
gcc -shared -Wl,-soname,nullmalloc.so -o nullmalloc.so nullmalloc.o // creates nullmalloc.so
当我使用 LD_PRELOAD 到 link nullmalloc.so
到我写的测试代码 test.cpp
时,我得到一个错误,说 .so 文件不能找到了。
我在 LD_PRELOAD 中使用的命令是这样的:
g++ -g test.cpp -o test.o -std=c++11 LD_PRELOAD=/home/nullmalloc/nullmalloc.so
我得到的错误是:
g++: error: LD_PRELOAD=/home/nullmalloc/nullmalloc.so: No such file or directory
我很困惑,因为当我使用 ls
命令时 nullmalloc.so
文件存在。
[root@a nullmalloc]$ ls
nullmalloc.cpp nullmalloc.o nullmalloc.so test.cpp
我才开始研究 malloc、linux 和共享库,所以我不确定我在哪里犯了错误。谁能就从哪里开始修复给出建议?
谢谢。
我不知道如何添加编译器标志,但您可以按如下方式使其工作。
照常编译测试:
g++ -Wall -g test.cpp -o test -std=c++11
像这样调用它:
LD_PRELOAD=/home/nullmalloc/nullmalloc.so ./test