Tag: ld preload

如何使用LD_PRELOAD拦截dlsym调用?

我想拦截应用程序对dlsym的调用,我已经尝试在.so中声明我正在预加载dlsym,并使用dlsym本身来获取它的真实地址,但是由于非常明显的原因不起作用。 有没有比采用进程’内存映射更容易,并使用libelf在加载的libdl.so中找到dlsym的真实位置?

拦截Linux上的文件操作

我正在开发一个用于渲染视觉效果和动画的云平台。 我们接受各种格式的场景描述渲染它们,并将图像输出返回给用户。 处理后端是Linux。 有时我们会收到在Windows上生成的场景描述,因此我们得到的路径看起来像’C:\ path \ to \ file.mb’。 我编写了一个Linux共享库来拦截各种文件系统调用,并改变Linux可以理解的路径’/ C / path / to / file’。 我使用LD_PRELOAD机制在“真实”函数之前插入我的函数,它工作得很好……除非它没有。 例如这个命令: LD_PRELOAD = / home / robert / path_fix.so渲染-s 1 -e 1 C:\ path \ to \ test_scene_03_vray.ma 找不到test_scene_03_vray.ma。 这也行不通: LD_PRELOAD = / home / robert / path_fix.so echo test> C:\ path \ to \ test.txt 我一直在使用ltrace来确定哪些函数是通过引用路径名来调用的,但这些示例并未显示在我的跟踪中: […]

LD_PRELOAD不能拦截系统调用,而只能拦截libcalls?

我的代码适用于malloc ,但不适用于mmap 。 代码如下: main.c中 #include #include int main(){ int * p = (int*) malloc(sizeof(int)); printf(“in main(): value p = %d\n”, *p); free(p); } preload.c #define _GNU_SOURCE #include #include #include #include void *(*orig_malloc)(size_t size); void *malloc(size_t size){ printf(” Hooked(preload)! malloc:size:%lu\n”, size); return orig_malloc(size); } void * (*orig_mmap)(void *start, size_t length, int prot, int flags, int […]

LD_PRELOAD和链接

我有这个小测试atfork_demo.c : #include #include void hello_from_fork_prepare() { printf(“Hello from atfork prepare.\n”); fflush(stdout); } void register_hello_from_fork_prepare() { pthread_atfork(&hello_from_fork_prepare, 0, 0); } 现在,我以两种不同的方式编译它: gcc -shared -fPIC atfork_demo.c -o atfork_demo1.so gcc -shared -fPIC atfork_demo.c -o atfork_demo2.so -lpthread 我的演示主要是atfork_demo_main.c是这样的: #include #include #include int main(int argc, const char** argv) { if(argc <= 1) { printf("usage: … lib.so\n"); return 1; } […]