ld-preload相关内容

C-Externs-监控LD_PRELOAD库中的值的安全方法

背景 我帮助维护了一个简单的命令行工具diskmanager,用于监视糟糕的磁盘性能,这主要是由于同时使用同一磁盘的操作/用户太多所致。我的工作涉及维护一个库,libdisksupervisor.so,它偶尔用于通过以下方式启动磁盘管理器程序来监督它: LD_PRELOAD=/public/libdisksupervisor.so /sbin/diskmanager 我们这样做的原 ..
发布时间:2022-08-23 10:58:08 其他开发

Linux下使用LD_PRELOAD混合64bit/32bit环境

我想将 LD_PRELOAD 设置为指向一个共享库,我可以在其中运行 64 位或 32 位应用程序.很明显,共享库和可执行文件必须在位上匹配. $ LD_PRELOAD=/lib64/lib_init.so ./hello32错误:ld.so:无法预加载来自 LD_PRELOAD 的对象“/lib64/lib_init.so"(错误的 ELF 类:ELFCLASS64):忽略 其中 hello ..
发布时间:2021-11-24 23:42:23 服务器开发

传递给函数的指针意外更改

我正在设计一个附加到 Pthreads 的基于预加载器的锁跟踪实用程序,但我遇到了一个奇怪的问题.该程序通过提供在运行时替换相关 Pthreads 函数的包装器来工作;这些做一些日志记录,然后将 args 传递给真正的 Pthreads 函数来完成工作.显然,它们不会修改传递给它们的参数.然而,在测试时,我发现传递给我的 pthread_cond_wait() 包装器的条件变量指针与传递给底层 P ..
发布时间:2021-06-18 19:54:36 C/C++开发

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

我想将LD_PRELOAD设置为指向一个共享库,在该共享库中我可以运行64位或32位应用程序.显然,共享库和可执行文件必须在位上匹配. $ LD_PRELOAD =/lib64/lib_init.so ./hello32错误:ld.so:无法预加载来自LD_PRELOAD的对象'/lib64/lib_init.so'(错误的ELF类:ELFCLASS64):已忽略 其中hello32是32 ..
发布时间:2021-05-29 22:17:52 服务器开发

可以使用LD_PRELOAD加载不同版本的glibc吗?

字符转换 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 ..
发布时间:2021-05-11 18:56:45 其他开发

如何使用LD_PRELOAD包装可变参数函数?

我必须对以下格式的可变参数执行动态链接: int foo(char * args,const char * f,...) 此处参数的数量是可变的.我想要实现的是,我想将获得的参数传递给我正在使用dlsym解决的原始函数.如果我不传递所有参数,则会不断出现细分错误.预先感谢. 解决方案 我认为您的问题与LD_PRELOAD或dlopen/dlsym无关:您只是想从可变函数调用可变函数 ..
发布时间:2021-05-03 19:04:00 其他开发

在运行时动态修改符号表(在C中)

是否可以在运行时以C(在Linux上为elf格式)动态修改符号表? 我的最终目标是: 在某些函数中说foo,我想将malloc函数覆盖到我的自定义处理程序my_malloc中.但是在foo之外,任何malloc仍应像在glibc中一样调用malloc. 注意:这与LD_PRELOAD不同,后者将在整个程序执行期间覆盖malloc. 解决方案 是否可以在运行时以C(在L ..
发布时间:2020-06-29 19:45:30 其他开发

LD_PRELOAD和strace有什么区别?

这两种方法都用于收集系统调用以及参数并返回它们的值.当我们更喜欢LD_PRELOAD时,为什么?也许可以说我们只能通过strace收集系统调用,但是可以通过LD_PRELOAD技巧来收集库调用.但是,还有一个名称为ltrace的库的跟踪器. 解决方案 strace正在使用 LD_PRELOAD技巧使用动态加载程序,例如/lib64/ld-linux-x86-64.so.2或/lib/ld. ..
发布时间:2020-06-29 19:45:26 其他开发

为什么LD_PRELOAD的值在堆栈上

我正在研究缓冲区溢出并解决一些战争游戏. 存在一个问题,除了main的返回地址外,缓冲区上方的所有堆栈内存都设置为0, buffer [0000000...][RET][000000...] ,我可以覆盖该RET. 因此,我找到了一些解决此问题的提示. 那是使用LD_PRELOAD. 有人说LD_PRELOAD的值不仅在堆栈的环境变量区域中,而且还在堆栈的某个位置. 因此,我设置了LD_ ..
发布时间:2020-05-08 20:12:02 服务器开发

为什么在RedHat 6.2中将`LD_PRELOAD`中指定的字符串加载到setuid可执行文件的内存中?

首先,让我告诉您有关情况. 我正在解决名为 BoF之王的战争游戏的问题,该游戏基于 RedHat Linux 6.2 ,该游戏具有 no 地址空间布局随机化(ASLR), NX位, ASCII铠装等.并且gcc在编译代码时不会产生任何虚拟效果.当我尝试解决名为golem的问题时,我想知道一些事情. 求解日志 这是golem的源代码.如您所见,它用0 填充了整个堆栈,除了main的返回地 ..
发布时间:2020-05-08 20:09:48 服务器开发

仅适用于malloc的函数插入不是免费的

在监视malloc和自由通过函数插入的使用时遇到了一个小问题. 仅对malloc执行函数插入时,其工作方式为exepcted.但是,当尝试自由插入时,它也会最终陷入循环.我似乎递归地调用了free,但是我不知道为什么. 这是malloc和free函数的代码. (mod_malloc_free.c) #define _GNU_SOURCE #include #i ..
发布时间:2020-05-05 12:35:45 其他开发

如何使静态链接的ELF文件加载LD_PRELOAD .so

我有静态链接的二进制文件(ELF文件),没有动态段,.dymsym节,并且不执行LD_PRELOAD命令等. 我该如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 解决方案 我如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 你不能. 即使可以,使LD_PRELOAD预先加载某些内容也会 没用:通常您希望在LD_PRELOAD ..
发布时间:2020-05-01 10:02:40 服务器开发

带有setuid二进制文件的LD_PRELOAD

我正在尝试使用LD_PRELOAD将具有setuid权限的应用程序预加载到库中.首先尝试了LD_PRELOAD,似乎它被setuid二进制文件忽略了,尽管当我与ls,dir等之类的尝试时,它可以工作. 摘自LD_PRELOAD的文档: LD_PRELOAD A whitespace-separated list of additional, user-spec ..
发布时间:2020-05-01 09:06:15 服务器开发

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_p ..
发布时间:2020-04-30 08:36:42 其他开发

在Linux上拦截文件操作

我正在一个云平台上渲染视觉效果和动画.我们接受场景描述的各种格式来渲染它们,并将图像输出返回给用户.处理后端是Linux.有时,我们会收到Windows上生成的场景描述,因此我们获得的路径类似于"C:\ path \ to \ file.mb".我已经编写了一个Linux共享库来拦截各种文件系统调用,并将路径更改为Linux可以理解的'/C/path/to/file'.我使用LD_PRELOAD机 ..
发布时间:2020-04-23 11:37:44 服务器开发

LD_PRELOADing malloc和空闲

我写了自己的 malloc 和 free ,并将它们编译到共享库中。我LD_PRELOAD库与我的程序。通过这种方式,我的程序总是使用我自定义的 malloc 和 free ,或者在某些情况下不是这样。我听说gcc已经建立了malloc和 free 。是否有可能我的gcc附带的glibc使用内置的 malloc 和 free 。第二,我注意到当我运行我的程序时,我看到 free 函数调用比 mal ..
发布时间:2018-04-21 11:18:01 服务器开发