jjzjj

preloader

全部标签

linux - 在 Linux 中使用 LD_PRELOAD 64 位/32 位混合环境

我想将LD_PRELOAD设置为指向一个共享库,我可以在其中运行64位或32位应用程序。很明显,共享库和可执行文件必须在位数上匹配。$LD_PRELOAD=/lib64/lib_init.so./hello32ERROR:ld.so:object'/lib64/lib_init.so'fromLD_PRELOADcannotbepreloaded(wrongELFclass:ELFCLASS64):ignored其中hello32是一个32位应用程序。世界上有一些页面说我应该能够做到:$LD_PRELOAD='/$LIB/lib_init.so'./hello32ERROR:ld.so

c++ - 在运行时使用 LD_PRELOAD 链接函数

我正在编写一个库,通过使用LD_PRELOAD=mylibmyexe运行程序,在运行时拦截对malloc和free的调用。对malloc和free的调用可以正常拦截。我的问题是mylib中还有另一个函数,我也想在使用LD_PRELOAD时拦截它,我无法弄清楚为什么它不像对malloc的调用那样“正常工作”>和免费。在mylib.c中:void*malloc(size_ts){returndoMyMalloc();}voidfree(void*p){doMyFree(p);}voidotherThing(size_t){doThing();}在myexe.cpp中:#includeext

linux - 为什么在 linux 内核中 radix_tree_preload 返回时禁用了抢占

我正在阅读一篇关于linux内核基数树实现的文章,文章链接如下:http://lwn.net/Articles/175432/在这篇文章中提到radix_tree_preload分配了足够的内存,以便后续插入树时不会失败。虽然它在每个CPU的基础上分配结构,因此函数返回时禁用了抢占。调用者有责任调用radix_tree_preload_end以启用抢占。我的问题是:1)为什么radix_tree_preload以per-CPU为基础分配结构?2)用户应该什么时候调用radix_tree_preload_end?是紧跟在radix_tree_insert之后吗?3)基数树用于页面缓存操作

c++ - 为什么 LD_PRELOAD 不适用于加载的共享库之一?

我在RedHatLinux5.0上有一个内部共享库,它提供函数free和malloc:>nm./libmem_consumption.so|grep-P-e"\bfree\b|\bmalloc\b"0000000000006540Tfree00000000000088a0Tmalloc此共享库负责提供有关进程内存消耗的信息。不幸的是,这个共享库在与Apachehttpd一起使用时会出现问题。当Apachehttpd与这个库一起运行时,我在libc::free中得到一个核心转储和一条指针无效的消息。问题似乎出在http.so中,它是由libphp5.so加载的共享库,由httpd加载。实

c - LD_PRELOAD 库和子进程

大家好!我有这样一个程序(usemalloc)的图像:#include#include#defineUSER_BYTES_SIZE100intmain(void){char*userbytes=(char*)malloc(USER_BYTES_SIZE*sizeof(char));if(!userbytes)return1;for(inti=0;i如您所见,存在导致内存溢出的差一错误。我想在运行时检测此类错误。LD_PRELOADed库适合我的工作。我制作了一个名为libhijack.so的库来劫持对真正malloc的调用并将其替换为对我自己的自定义malloc的调用,该调用调用真正的

linux - LD_PRELOAD 在动态库加载器中导致段错误

我编写了一个库,旨在通过LD_PRELOAD加载。在某些Linux系统上,这会导致动态库加载程序在初始化期间出现段错误。我有一个表现出这种行为的简单测试用例,但前提是我使用-lm进行链接。例如:#Worksfinegcc-ovecadd.normal-std=c99vecadd.c-lOpenCLLD_PRELOAD=/path/to/my/library.so./vecadd.normal#Causessegmentationfaultgcc-ovecadd.broken-std=c99vecadd.c-lOpenCL-lmLD_PRELOAD=/path/to/my/library

linux - Valgrind 和 LD_PRELOAD - 无法预加载对象

我正在尝试运行我的程序,这需要一个库位于LD_PRELOAD环境变量,带valgrind。当我这样做时,我得到以下错误:ERROR:ld.so:object'/path/to/lib/libLIBRARY.so'fromLD_PRELOADcannotbepreloaded:ignored.但是,如果我要运行程序WITHOUTvalgrind,它很乐意使用LD_PRELOADed库。为什么会这样?有办法解决吗?(P.S.系统是64位科学linux5,我相信) 最佳答案 如果valgrind是64位的,而共享库和应用程序都是32位的,

linux - 为什么 LD_PRELOAD 对没有 shebang 的脚本不生效?

如果在运行脚本时使用LD_PRELOAD指定要预加载的库,我发现实际上仅当脚本有shebang行时才预加载该库。例如,给定这个脚本:#NotashebangechoHello和这个命令:LD_PRELOAD=/path/to/preload_me.so./script.sh脚本在完全没有加载库的情况下运行,我可以通过其初始化代码的(非)效果来监控。另一方面,如果我添加一个shebang行:#!/bin/shechoHello...然后当我通过同一命令运行脚本时,库被加载。指定哪个解释器似乎并不重要。当然,我也可以使用/bin/bash或我尝试过的任何其他sh系列shell。为什么会有差

linux - 错误 : ld. 所以:无法预加载来自 LD_PRELOAD 的对象 'libgtk3-nocsd.so.0'

在Ubuntu18.04上使用Hugo和AWSCLI时遇到此问题。ERROR:ld.so:object'libgtk3-nocsd.so.0'fromLD_PRELOADcannotbepreloaded(failedtomapsegmentfromsharedobject):ignored.这是Ubuntu18.04、Hugo和AWSCLI的全新安装。 最佳答案 在此处进行一些网络搜索后找到了答案:https://github.com/PX4/Firmware/issues/9409解决方案如果您使用以下行更新您的.bashrc,

c - 如何使用 LD_PRELOAD 检查是否已预加载 linux 共享库

我熟悉使用dlopen()检查共享库是否已加载到进程中,使用之前调用dlopen()而不触发加载如果它不存在,像这样:void*lib=dlopen(lib_name,RTLD_NOLOAD);if(lib!=NULL){...}我最近尝试应用相同的模式来确定少数共享库中的一个是否已使用LD_PRELOAD加载到进程空间中。但是在所有情况下,上述对dlopen()的调用都会返回NULL。基本上,如果我使用此命令行启动进程LD_PRELOAD=libawesome.so./mycoolprocess然后在mycoolprocess.c中的代码中运行如下检查void*has_awesome