ld-preload相关内容
背景 我帮助维护了一个简单的命令行工具diskmanager,用于监视糟糕的磁盘性能,这主要是由于同时使用同一磁盘的操作/用户太多所致。我的工作涉及维护一个库,libdisksupervisor.so,它偶尔用于通过以下方式启动磁盘管理器程序来监督它: LD_PRELOAD=/public/libdisksupervisor.so /sbin/diskmanager 我们这样做的原
..
我想将 LD_PRELOAD 设置为指向一个共享库,我可以在其中运行 64 位或 32 位应用程序.很明显,共享库和可执行文件必须在位上匹配. $ LD_PRELOAD=/lib64/lib_init.so ./hello32错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“/lib64/lib_init.so"(错误的 ELF 类:ELFCLASS64):忽略 其中 hello
..
我正在设计一个附加到 Pthreads 的基于预加载器的锁跟踪实用程序,但我遇到了一个奇怪的问题.该程序通过提供在运行时替换相关 Pthreads 函数的包装器来工作;这些做一些日志记录,然后将 args 传递给真正的 Pthreads 函数来完成工作.显然,它们不会修改传递给它们的参数.然而,在测试时,我发现传递给我的 pthread_cond_wait() 包装器的条件变量指针与传递给底层 P
..
我想将LD_PRELOAD设置为指向一个共享库,在该共享库中我可以运行64位或32位应用程序.显然,共享库和可执行文件必须在位上匹配. $ LD_PRELOAD =/lib64/lib_init.so ./hello32错误:ld.so:无法预加载来自LD_PRELOAD的对象'/lib64/lib_init.so'(错误的ELF类:ELFCLASS64):已忽略 其中hello32是32
..
字符转换 big-old-app 链接到旧版本的 glibc ,例如 glibc-2.12 .我无能为力. cute-new-addon.o 已链接到更新版本 glibc-2.23 .此 glibc-2.23 位于非标准路径中(因为我没有sudo权限). 故事 我想在 big-old-app 中使用 cute-new-addon.o .我通常会编写一个脚本来执行 big-old
..
我必须对以下格式的可变参数执行动态链接: int foo(char * args,const char * f,...) 此处参数的数量是可变的.我想要实现的是,我想将获得的参数传递给我正在使用dlsym解决的原始函数.如果我不传递所有参数,则会不断出现细分错误.预先感谢. 解决方案 我认为您的问题与LD_PRELOAD或dlopen/dlsym无关:您只是想从可变函数调用可变函数
..
我可以将LD_PRELOAD用于普通的本机应用程序,例如ls: LD_PRELOAD =/path/to/my/library.so ls 经过一些搜索,我还可以通过设置以下属性将其与java应用程序一起使用: adb shell setprop wrap.com.some.app LD_PRELOAD =/path/to/my/library.so 但是我对在 mediaserv
..
是否可以在运行时以C(在Linux上为elf格式)动态修改符号表? 我的最终目标是: 在某些函数中说foo,我想将malloc函数覆盖到我的自定义处理程序my_malloc中.但是在foo之外,任何malloc仍应像在glibc中一样调用malloc. 注意:这与LD_PRELOAD不同,后者将在整个程序执行期间覆盖malloc. 解决方案 是否可以在运行时以C(在L
..
特别是在Mac OS X上,是否可以通过DYLD_INSERT_LIBRARIES使程序忽略SIGTERM,从而对任何或大多数程序都起作用? 我尝试编译并插入此代码: #include #include #include void sig_handler(int signo) { if (signo == SIGTER
..
这两种方法都用于收集系统调用以及参数并返回它们的值.当我们更喜欢LD_PRELOAD时,为什么?也许可以说我们只能通过strace收集系统调用,但是可以通过LD_PRELOAD技巧来收集库调用.但是,还有一个名称为ltrace的库的跟踪器. 解决方案 strace正在使用 LD_PRELOAD技巧使用动态加载程序,例如/lib64/ld-linux-x86-64.so.2或/lib/ld.
..
我正在研究缓冲区溢出并解决一些战争游戏. 存在一个问题,除了main的返回地址外,缓冲区上方的所有堆栈内存都设置为0, buffer [0000000...][RET][000000...] ,我可以覆盖该RET. 因此,我找到了一些解决此问题的提示. 那是使用LD_PRELOAD. 有人说LD_PRELOAD的值不仅在堆栈的环境变量区域中,而且还在堆栈的某个位置. 因此,我设置了LD_
..
首先,让我告诉您有关情况. 我正在解决名为 BoF之王的战争游戏的问题,该游戏基于 RedHat Linux 6.2 ,该游戏具有 no 地址空间布局随机化(ASLR), NX位, ASCII铠装等.并且gcc在编译代码时不会产生任何虚拟效果.当我尝试解决名为golem的问题时,我想知道一些事情. 求解日志 这是golem的源代码.如您所见,它用0 填充了整个堆栈,除了main的返回地
..
在监视malloc和自由通过函数插入的使用时遇到了一个小问题. 仅对malloc执行函数插入时,其工作方式为exepcted.但是,当尝试自由插入时,它也会最终陷入循环.我似乎递归地调用了free,但是我不知道为什么. 这是malloc和free函数的代码. (mod_malloc_free.c) #define _GNU_SOURCE #include #i
..
我有静态链接的二进制文件(ELF文件),没有动态段,.dymsym节,并且不执行LD_PRELOAD命令等. 我该如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 解决方案 我如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 你不能. 即使可以,使LD_PRELOAD预先加载某些内容也会 没用:通常您希望在LD_PRELOAD
..
我正在尝试使用LD_PRELOAD将具有setuid权限的应用程序预加载到库中.首先尝试了LD_PRELOAD,似乎它被setuid二进制文件忽略了,尽管当我与ls,dir等之类的尝试时,它可以工作. 摘自LD_PRELOAD的文档: LD_PRELOAD A whitespace-separated list of additional, user-spec
..
我有这个小的测试代码atfork_demo.c: #include #include void hello_from_fork_prepare() { printf("Hello from atfork prepare.\n"); fflush(stdout); } void register_hello_from_fork_p
..
考虑以下可在任何程序执行之前预加载的库: // g++ -std=c++11 -shared -fPIC preload.cpp -o preload.so // LD_PRELOAD=./preload.so #include struct Goodbye { Goodbye() {std::cout
..
我正在一个云平台上渲染视觉效果和动画.我们接受场景描述的各种格式来渲染它们,并将图像输出返回给用户.处理后端是Linux.有时,我们会收到Windows上生成的场景描述,因此我们获得的路径类似于"C:\ path \ to \ file.mb".我已经编写了一个Linux共享库来拦截各种文件系统调用,并将路径更改为Linux可以理解的'/C/path/to/file'.我使用LD_PRELOAD机
..
我写了自己的 malloc 和 free ,并将它们编译到共享库中。我LD_PRELOAD库与我的程序。通过这种方式,我的程序总是使用我自定义的 malloc 和 free ,或者在某些情况下不是这样。我听说gcc已经建立了malloc和 free 。是否有可能我的gcc附带的glibc使用内置的 malloc 和 free 。第二,我注意到当我运行我的程序时,我看到 free 函数调用比 mal
..
为了测试LD_PRELOAD,我编写了自己的 getpid ,它在使用dlsym调用原始 getpid 之前打印了一些内容。代码如下。 #define _GNU_SOURCE #include #include #include typedef pid_t(* getpidType)(void);
..